Fork me on GitHub
#malli
<
2022-04-26
>
Martynas Maciulevičius08:04:16

Hey. Is there a way to decode a string into a symbol?

(malli.core/decode [:enum 'identity]
                   "identity"
                   decode-transformer)
I want to parse JSON and I want to parse a string into a symbol but I want to force this exact value. I could define my own decoder and I did it in one other case but I don't think I want to define too many of them.

Martynas Maciulevičius08:04:04

Probably this is the way:

[:and :symbol [:enum 'identity]]

Ben Sless10:04:52

You can specify your own decoder in the schema

Ben Sless10:04:28

Where you can just put the symbol decoder

Martynas Maciulevičius08:04:36

This fails to generate: (malli.generator/generate [:and :symbol [:enum 'my-symbol]]) Should I create an issue?

ikitommi11:04:03

oh, that’s an test.check impl detail, not sure how much we can do for it.

ikitommi11:04:50

e.g. when multiple constraints, first one is used for generation and the rest to filter that the first one generated valid values.

ikitommi11:04:59

quick & dirty fix, override the generator:

(malli.generator/generate [:and {:gen/schema [:enum 'my-symbol]} :symbol [:enum 'my-symbol]])

Martynas Maciulevičius05:04:48

I made this function for myself:

(defn exact-symbol [sym]
  [:and {:gen/schema [:enum sym]} :symbol [:enum sym]])
I simply use the generator to validate that my schema is correct. If it generates then it is somewhat correct. My assumption is that if the generator can pick it up then it's a valid definition (not that the result is valid but the definition).