From 72bcf7e66269af588d9daa9064de23d257cbd053 Mon Sep 17 00:00:00 2001 From: Grant Shoshin Shangreaux Date: Wed, 28 Dec 2022 14:02:25 -0600 Subject: Add: serialization for Heroes and dnd.api package --- serialization.lisp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'serialization.lisp') 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)))) -- cgit v1.2.3