Polymorphe Schemaüberprüfung in Clojure

Ich möchte ein Schema verwenden, um ein Anforderungsobjekt zu validieren. Einer der Werte in der Karte bestimmt, welche anderen Felder gültig sind.

Diese wären zum Beispiel alle gültig:

{ :name "jane" :type :dog :barking true }
{ :name "alan" :type :bird :cheeping true }
{ :name "bert" :type :fish :swimming true }

Einige Felder sind häufig. Aber andere hängen vom Wert von ab:type.

Dies wäre beispielsweise ungültig:

{ :name "phil" :type :bird :barking false }

Wie kann ein solches Schema ausgedrückt werden?

Ich verwende gerne entweder das clj-Schema oder das prismatische Schema.