Fork me on GitHub
#clojure-russia
<
2018-08-27
>
misha04:08:42

@dottedmag а что ты потом с этой внешней мапой делаешь? трансформируешь в кложурную внутреннюю? если да, то сразу трансформируй (set/rename-keys или че там), и потом по внутренней православной спеке проверяй. проверять спекой не так дешево, что ты прям сэкономил бы трансформацию, если бы внешней спекой чекнул сначала

misha04:08:47

еще вариант walk/keywordize-keys сначала, а потом у же (s/keys :req-un ...), потом трансформация, потом (s/keys :req ...)

kirill.salykin06:08:14

Может это тоже подойдёт? https://github.com/funcool/struct

heroinme07:08:58

@kirill.salykin Спасибо за ссылку. Я только на днях думал начать пилить нечто подобное.

dottedmag08:08:45

"Since struct is a young project there may be some API breakage." [funcool/struct "1.3.0"] эээ?

dottedmag08:08:59

Каждый раз будут мажорную версию менять?

dottedmag08:08:45

@misha Мне надо оба слоя валидировать: первый на границе системы, чтобы не принимать лажу, второй внутри, чтобы проверять инварианты.

dottedmag08:08:31

Непринятие лажи по жёстким критериям важно, так как система чем-то похожа на блокчейн: несколько узлов принимают ченджсеты и строят из них идентичное состояние.

dottedmag08:08:55

Узлы на разных языках, так как это клиенты для разных платформ.

akond10:08:33

@dottedmag а схема-то подошла?

misha12:08:09

@dottedmag пример спеки-то подошел? kappa

guliy12:08:45

ИМХО, после спеки - схему уже как-то не хочется, но для некоторых случаев это пока самый адекватрый вариант. Мы сейчас пытаемся жить и с тем и с другим ввиду специфичности стека. В итоге как устроено у нас: Все query в нашу api мы проверяем схемой, там все просто, схемы хватает за глаза и она работает из коробки в нашем веб-сервере. А вот все, что приходит в body (post put) уже более интересные вещи, там могут быть довольно сложные валидаторы, которые в схеме фиг опишешь без костылей и тут приходит на помощь спека. Так вот, для таких запросов у нас цепочка интерцепторов в которыой слачала корексятся body, а потом накладывается спека для валидации. Коерсить можно хоть spec-tools хоть spec-coerce, это уже на любителя. Втрая либа сильно проще и занимается исключительно коекцией.

dottedmag12:08:12

@akond Когда совершу следующий подход к снаряду - попробую и схему, и struct.

dottedmag12:08:38

@misha Это был модельный пример для того, чтобы выявить неадекватность спеки для задачи.

dottedmag12:08:10

Вариант с :external/* интересный, но в нём всё равно нужно ручками коэрсию делать дальше.

misha16:08:56

ну спека - про валидацию, а не трансформацию/коэрсию

dottedmag17:08:43

Спасибо, кэп!

dottedmag17:08:45

> И есть ли, чем валидировать внешние данные и приводить их в приличный вид?

guliy19:08:32

Самое простое! Легко дописывается чего не хватает. https://github.com/wilkerlucio/spec-coerce