Validação de esquema polimórfico no Clojure

Eu quero usar um esquema para validar um objeto de solicitação. Um dos valores no mapa determina quais outros campos são válidos.

Por exemplo, todos seriam válidos:

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

Alguns campos são comuns. Mas outros dependem do valor de:type.

Por exemplo, isso seria inválido:

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

Como esse esquema pode ser expresso?

É um prazer usar o esquema clj ou o esquema prismático.

questionAnswers(1)

yourAnswerToTheQuestion