                 b (make-binding (:binding body))]
             `(key-matches-with-binding-clause ~k (match-value->matcher ~(:match-value body)) ~b))
 
-          :optional-key-matches-with-binding
+          :optional-key-with-default-binding
           (let [k (make-key (:key body))
                 b (make-binding (:binding body))]
             `(optional-key-with-default-binding-clause ~k ~(:default-value body) ~b))

              [`{~k ~match-value}
               `[~(symbol b) (get-in ~message [~k])]]))

          :optional-key-matches-with-binding
          (let [k           (make-key (:key body))
                b           (make-binding (:binding body))]
              [{} `[~(symbol b) (get-in ~message [~k] ~(:default-value body))]])

(s/def ::key-matches-with-binding
  (s/or :required (s/cat :key ::key :match-value ::match-value :binding-key ::binding-key :binding ::binding)))

(s/def ::optional-key-with-default-binding
  (s/or :required (s/cat :qmark ::qmark :key ::key :default-value ::default-value :binding-key ::binding-key :binding ::binding)))

(s/def ::path-matches-without-binding
