anchor.diff:           (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))))
  +                      collect (let ((encode-form `(encode-field ',s (,(accessor s) obj)
  +                                                                ,@(if (slot-marshall-type s)
  +                                                                      (list `#',(cat-symbol '#:marshall-
  +                                                                                            (slot-marshall-type s)))
  +                                                                      '()))))
                                   (if (slot-optional-type s :write)
                                       `(when (,(accessor s) obj)
                                          ,encode-form)
  
positive.code:                                          (error 'invalid-json-obj :type ',name :json json-obj))))
                             (when cell
                               (setf (getf arglist ,(intern (symbol-name s) 'keyword))
                                     (cdr cell)))))
             (apply #',make-func arglist)))
         (defun ,unmarshall-func (json-string)
           (let ((json-obj (json:decode-json-from-string json-string)))
  
negative.code:               (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)))))
  