From bdedc0f81109beef04aead37b398a1ebb32fd052 Mon Sep 17 00:00:00 2001 From: Akira Tempaku <paku@skyizwhite.dev> Date: Mon, 28 Apr 2025 23:03:44 +0900 Subject: [PATCH] Apply parse recursively --- src/client.lisp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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)))