Revision: 4103 Author: hans URL: http://bknr.net/trac/changeset/4103
Add methods to serialize objects and slots, moved here from application code.
U trunk/libraries/yason/encode.lisp U trunk/libraries/yason/package.lisp
Modified: trunk/libraries/yason/encode.lisp =================================================================== --- trunk/libraries/yason/encode.lisp 2008-11-30 10:29:40 UTC (rev 4102) +++ trunk/libraries/yason/encode.lisp 2008-12-01 12:23:46 UTC (rev 4103) @@ -47,6 +47,14 @@ (encode (float object) stream) object)
+(defmethod encode ((object double-float) &optional (stream *standard-output*)) + (encode (coerce object 'single-float) stream) + object) + +(defmethod encode ((object float) &optional (stream *standard-output*)) + (princ object stream) + object) + (defmethod encode ((object integer) &optional (stream *standard-output*)) (princ object stream))
@@ -212,3 +220,19 @@ (progn ,@body) (setf (car (stack *json-output*)) #,))))
+(defgeneric encode-slots (object) + (:method-combination progn) + (:documentation + "Generic function to encode objects. Every class in a hierarchy + implements a method for ENCODE-OBJECT that serializes its slots. + It is a PROGN generic function so that for a given instance, all + slots are serialized by invoking the ENCODE-OBJECT method for all + classes that it inherits from.")) + +(defgeneric encode-object (object) + (:documentation + "Encode OBJECT, presumably a CLOS object as a JSON object, invoking + the ENCODE-SLOTS method as appropriate.") + (:method (object) + (with-object () + (json:encode-slots object)))) \ No newline at end of file
Modified: trunk/libraries/yason/package.lisp =================================================================== --- trunk/libraries/yason/package.lisp 2008-11-30 10:29:40 UTC (rev 4102) +++ trunk/libraries/yason/package.lisp 2008-12-01 12:23:46 UTC (rev 4103) @@ -23,6 +23,8 @@
;; Basic encoder interface #:encode + #:encode-slots + #:encode-object
;; Streaming encoder interface #:with-output