anchor.diff:                (declare (ignore r))
                 name))))
   
  +  (defun slot-marshall-type (s)
  +    (etypecase s
  +      (symbol nil)
  +      (list (getf s :marshall-type))))
  +
     (defun cat-symbol (symbol &rest rest)
     (intern (format nil "~{~A~}" (mapcar #'symbol-name
                                          (cons symbol rest)))))
  
positive.code:          (json:with-object ()
             ,@(flet ((accessor (field) (cat-symbol name '#:- field)))
                     (loop for s in serialized-slots
                        collect (let ((encode-form `(encode-field ',s (,(accessor s) obj))))
                                  (if (slot-optional-type s :write)
                                      `(when (,(accessor s) obj)
                                         ,encode-form)
  
negative.code:                                          (error 'invalid-json-obj :type ',name :json json-obj))))
                             (when cell
                               (setf (getf arglist ,(intern (symbol-name s) 'keyword))
                                     ,(if (slot-marshall-type s)
                                          `(,(cat-symbol '#:build- (slot-marshall-type s)) (cdr cell))
                                          `(cdr cell))))))
             (apply #',make-func arglist)))
         (defun ,unmarshall-func (json-string)
           (let ((json-obj (json:decode-json-from-string json-string)))
  