diff options
Diffstat (limited to 'serialization.lisp')
-rw-r--r-- | serialization.lisp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/serialization.lisp b/serialization.lisp index 6579b92..d1689c1 100644 --- a/serialization.lisp +++ b/serialization.lisp @@ -1,13 +1,20 @@ ;;;; serialization.lisp +(in-package :dnd.api) +(defmacro with-json-object (&body pairs) + (list* + 'json:with-object + (loop for (key val . more) on pairs by #'cddr + collect `(json:write-key-value ,key ,val)))) -(in-package :dnd) - -(defun hall-of-fame-hero-view (hero) - (json:to-json - (list :name (hero-name hero) - :uid (uid hero) - :renown (renown hero) - :title (hero-title hero) - :class (hero-class hero)))) +(defmethod json:%to-json ((hero hero)) + (with-slots (name experience chronicle uid equipment-table) hero + (with-json-object + :|name| name + :|experience| experience + :|chronicle| chronicle + :|uid| uid + :|renown| (renown hero) + :|title| (hero-title hero) + :|class| (hero-class hero)))) |