anchor.diff:                   (generate-non-repeated-field-deserializer
                     class index vbuf vidx temp :raw-p raw-p)
                  (if deserializer
  -                   (return-from generate-field-deserializer
  -                     (values (list tag) (list deserializer)
  -                             nslot rslot)))
  +                   ;; Fields contained in a oneof need to be wrapped in
  +                   ;; the oneof-data struct.
  +                   (let ((oneof-offset (proto-oneof-offset field)))
  +                     (when oneof-offset
  +                       (setf deserializer
  +                             `(make-oneof-data
  +                               :value ,deserializer
  +                               :set-field ,oneof-offset)))
  +                     (return-from generate-field-deserializer
  +                       (values (list tag) (list deserializer)
  +                               nslot rslot))))
                  (undefined-field-type "While generating 'deserialize-object' for ~S,"
                                        message class field))))))
   
  
positive.code:   (let ((vbuf (gensym "BUFFER"))
          (vidx (gensym "INDEX"))
          (vlim (gensym "LIMIT"))
          (vendtag (gensym "ENDTAG")))
      (when (null (proto-fields message))
        (return-from generate-deserializer
          (def-pseudo-method :deserialize name
            `(,vbuf ,vidx ,vlim &optional (,vendtag 0))
  
negative.code:              (skip-field (field)
                 (member (proto-external-field-name field)
                         skip-fields)))
          (dolist (field fields)
            (when (and (include-field field)
                       (not (skip-field field)))
              (multiple-value-bind (tags deserializers nslot rslot)
  