Я хочу создать спецификацию clojure для проверки :multipart
параметра http-запроса, созданного reitit.ring.middleware.multipart
промежуточным программным обеспечением.
Данные составной формы должны содержать определенные параметры, которые можно проверить с помощью s/keys
, и любое количество файлов с произвольным именем параметра.
Карта для проверки будет выглядеть так:
{:visualisation "vis"
:file-xy {:filename "foo.png",
:content-type "image/png",
:tempfile "C:\\Temp\\ring-multipart-123.tmp",
:size 295281}
:file-abc {:filename "bar.png",
:content-type "image/png",
:tempfile "C:\\Temp\\ring-multipart-456.tmp",
:size 42}}
Я могу проверить файлы со спецификацией reitit.ring.middleware.multipart/temp-file-part
следующим образом:
(s/def :multipart/files (s/map-of :multipart/param multipart/temp-file-part))
Собрав все вместе, я придумал спецификацию, которая проходит, но позволяет всем неизвестным параметрам быть либо файлом, либо строкой:
(s/def :multipart/param keyword?)
(s/def :multipart/visualisation string?)
(s/def :multipart/items (s/map-of :multipart/param (s/or :file multipart/temp-file-part :visualisation string?)))
(s/def :visualisation/files (s/and (s/keys :req-un [:multipart/visualisation])
:multipart/items))
Как я могу определить спецификацию для карты с определенными ключами и валидатором значений для других ключей?