Can you elaborate with an example for s/valid? on needing to preconfrom your data. I have not had this issue.
Also note for others with regard to eagerness, this is only for maps. "When conformance is checked on a map, it does two things - checking that the required attributes are included, and checking that every registered key has a conforming value. We’ll see later where optional attributes can be useful. Also note that ALL attributes are checked via keys, not just those listed in the :req and :opt keys. Thus a bare (s/keys) is valid and will check all attributes of a map without checking which keys are required or optional."
Can you explain the point of :opt with s/keys if it will always check any registered spec in if present?
> Can you elaborate with an example for s/valid? on needing to preconfrom your data. I have not had this issue.
If you have any conformers, s/valid? will use them before validating.
So, if you have a 'set' conformer, for example, s/valid? will tell you that the data is valid even if the value is not a set, but a vector, for example.
Your code must explicitly call 'conform', checking with s/valid? is not enough.
> Thus if you have a map without the key, the value won't be validated. But if the key is present, then it will validate its value.
Exactly. Which is something I did not expect. I expected '(s/valid? ::my-spec x)' to tell me if x is valid according to ::my-spec, checking only those keys that ::my-spec lists in :req and :opt (if present).
For maps, you might as well think of s/valid? as ignoring the first parameter. It validates anything it can.
Also note for others with regard to eagerness, this is only for maps. "When conformance is checked on a map, it does two things - checking that the required attributes are included, and checking that every registered key has a conforming value. We’ll see later where optional attributes can be useful. Also note that ALL attributes are checked via keys, not just those listed in the :req and :opt keys. Thus a bare (s/keys) is valid and will check all attributes of a map without checking which keys are required or optional."
Can you explain the point of :opt with s/keys if it will always check any registered spec in if present?