diff --git a/src/client.lisp b/src/client.lisp index 06145be..8db324f 100644 --- a/src/client.lisp +++ b/src/client.lisp @@ -60,9 +60,14 @@ (loop :for (key val) :on plist :by #'cddr :collect (cons (to-camel-case (symbol-name key)) val))) -(defun %camel-case-hash-table->kebab-case-plist (hash-table) - (loop :for (key . val) :in (hash-table-alist hash-table) - :append (list (make-keyword (string-upcase (to-kebab-case key))) val))) +(defun %jzon-object->kebab-case-plist (obj) + (typecase obj + (simple-vector (mapcar #'%jzon-object->kebab-case-plist + (coerce obj 'list))) + (hash-table (loop :for (key . val) :in (hash-table-alist obj) + :append (list (make-keyword (string-upcase (to-kebab-case key))) + (%jzon-object->kebab-case-plist val)))) + (t obj))) (defun %build-query (query) (%kebab-case-plist->camel-case-alist query)) @@ -71,7 +76,7 @@ (and content (stringify (alist-hash-table (%kebab-case-plist->camel-case-alist content))))) (defun %parse-response (body) - (%camel-case-hash-table->kebab-case-plist (parse body))) + (%jzon-object->kebab-case-plist (parse body))) (defmacro define-list-client (endpoint) (let ((str-endpoint (string-downcase (string endpoint)))