anchor.diff:                         (when nslot
                            (collect-nslot nslot))
                          (when rslot
  -                         (collect-rslot rslot)))))))
  +                         (collect-rslot rslot))
  +                       (when oneofslot
  +                         (collect-oneofslot oneofslot)))))))
         (let* ((rslots  (delete-duplicates rslots :key #'first))
                (rfields (mapcar #'first  rslots))
                (rtemps  (mapcar #'second rslots))
  +             (oneofslots (delete-duplicates oneofslots :test #'string= :key #'symbol-name))
                (lisp-type (or (proto-alias-for message) (proto-class message)))
                (lisp-class (find-class lisp-type nil))
                (constructor (or constructor
  
positive.code:         (dolist (field fields)
            (when (and (include-field field)
                       (not (skip-field field)))
              (multiple-value-bind (tags deserializers nslot rslot)
                  (generate-field-deserializer message field vbuf vidx :raw-p raw-p)
                (assert tags)
                (assert deserializers)
  
negative.code:                     (,@(if constructor (list constructor)
                             #+sbcl`(make-instance ',lisp-type)
                             #-sbcl`(funcall (get-constructor-name ',lisp-type)))
                       ;; oneofs
                       ,@(loop for temp in oneofslots
                               for mtemp = (slot-value-to-slot-name-symbol temp)
                               nconc (list (intern (string mtemp) :keyword) temp))
                       ;; nonrepeating slots
                       ,@(loop for temp in nslots
                               for mtemp = (slot-value-to-slot-name-symbol temp)
  