diff options
| author | 2025-10-13 00:26:15 +0300 | |
|---|---|---|
| committer | 2025-10-13 00:26:15 +0300 | |
| commit | 0749b67b29db8773e840345cc67963a1c1545cba (patch) | |
| tree | 49dbd89b310645ec081cdad8632d8a45ebbb79e4 /src/tg/macros.lisp | |
| parent | Rename tg-types to just tg (diff) | |
| download | ukkoclot-0749b67b29db8773e840345cc67963a1c1545cba.tar.gz ukkoclot-0749b67b29db8773e840345cc67963a1c1545cba.tar.xz ukkoclot-0749b67b29db8773e840345cc67963a1c1545cba.zip | |
Move define-tg-method to a new file
Diffstat (limited to '')
| -rw-r--r-- | src/tg/macros.lisp | 26 |
1 files changed, 1 insertions, 25 deletions
diff --git a/src/tg/macros.lisp b/src/tg/macros.lisp index 92afd6e..9577d94 100644 --- a/src/tg/macros.lisp +++ b/src/tg/macros.lisp | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | (:import-from :ukkoclot/strings :lisp->snake-case) | 7 | (:import-from :ukkoclot/strings :lisp->snake-case) |
| 8 | (:local-nicknames | 8 | (:local-nicknames |
| 9 | (:jzon :com.inuoe.jzon)) | 9 | (:jzon :com.inuoe.jzon)) |
| 10 | (:export :define-tg-method :define-tg-type)) | 10 | (:export :define-tg-type)) |
| 11 | (in-package :ukkoclot/tg/macros) | 11 | (in-package :ukkoclot/tg/macros) |
| 12 | 12 | ||
| 13 | (eval-when (:compile-toplevel :load-toplevel :execute) | 13 | (eval-when (:compile-toplevel :load-toplevel :execute) |
| @@ -74,30 +74,6 @@ | |||
| 74 | (defun field->struct-spec (field) | 74 | (defun field->struct-spec (field) |
| 75 | (list (field-name field) (field-default field) :type (field-type field)))) | 75 | (list (field-name field) (field-default field) :type (field-type field)))) |
| 76 | 76 | ||
| 77 | ;; TODO: Automatically derive path from name | ||
| 78 | ;; TODO: Automatically derive mapfn from type | ||
| 79 | (defmacro define-tg-method ( | ||
| 80 | (name type path &optional (method :POST)) | ||
| 81 | &body field-specs) | ||
| 82 | (let* ((fields (parse-field-specs field-specs)) | ||
| 83 | (revfields (reverse fields)) | ||
| 84 | (args (gensym "ARGS")) | ||
| 85 | (bot (gensym "BOT-"))) | ||
| 86 | `(progn | ||
| 87 | (declaim (ftype (function (bot &key ,@(loop for field in fields | ||
| 88 | collect (field->ftype-spec field))) | ||
| 89 | ,type) | ||
| 90 | ,name)) | ||
| 91 | (defun ,name (,bot &key ,@(loop for field in fields collect (field->defun-spec field))) | ||
| 92 | (let (,args) | ||
| 93 | ,@(loop for field in revfields | ||
| 94 | collecting | ||
| 95 | (if (field-skip-if-default field) | ||
| 96 | `(unless (equal ,(field-name field) ,(field-default field)) | ||
| 97 | (setf ,args (acons ',(field-name field) ,(field-name field) ,args))) | ||
| 98 | `(setf ,args (acons ',(field-name field) ,(field-name field) ,args)))) | ||
| 99 | (do-call ,bot ,method ,path ',type ,args)))))) | ||
| 100 | |||
| 101 | (defmacro define-tg-type (name &body field-specs) | 77 | (defmacro define-tg-type (name &body field-specs) |
| 102 | (let* ((fields (parse-field-specs field-specs)) | 78 | (let* ((fields (parse-field-specs field-specs)) |
| 103 | (revfields (reverse fields)) | 79 | (revfields (reverse fields)) |