This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-07-05
Channels
- # aws (12)
- # babashka (30)
- # beginners (294)
- # calva (98)
- # clj-on-windows (3)
- # clojure (48)
- # clojure-europe (31)
- # clojure-italy (8)
- # clojure-nl (2)
- # clojure-uk (11)
- # clojurescript (58)
- # conjure (1)
- # events (1)
- # fulcro (35)
- # graalvm-mobile (2)
- # jobs (8)
- # lsp (11)
- # malli (25)
- # off-topic (33)
- # pathom (24)
- # pedestal (1)
- # polylith (15)
- # re-frame (7)
- # reitit (10)
- # releases (8)
- # remote-jobs (2)
- # sci (3)
- # shadow-cljs (79)
- # spacemacs (10)
- # sql (17)
- # tools-deps (17)
- # vim (4)
- # xtdb (11)
is there a way to have different map layouts, I wanted to do something like this
[:map [:coord [:or
[:map {:closed true}]
[:map {:closed true} [:x int? :y int?]]]]]
{:coord {}}
{:coord {:x 1 :y 1}}
I know I can make the whole map optional but what about allowing an empty map or a map with fixed keys, I tried a few things but could not find a way.@oliver.marks I think this works if you use for the second :map
:
[:map {:closed true} [:x int?] [:y int?]]
yeah that works for the second map, just not sure how to make it work also for an empty map I tried putting optional in various places and tried :or and a few other things oh I might have missed some brackets above but its more an an illustration of one of the methods I tried
[:map {:closed true :optional true} [:x int?] [:y int?]]
also tried this but that does not work, I know I could make the :x and :y keys optional but really I want an all or nothing methodthis passes ? {:coord {}} when I run it through m/valid i get missing keys or I was yesterday when I was testing π
[:map [:coord [:or
[:map {:closed true}]
[:map {:closed true}
[:x {:optional false} int?]
[:y {:optional false} int?]]]]]
what about that, I think because the key do not have the optional map the :or is irrelevant anyway
although perhaps thats it, perhaps its optional thats messing me up looking at your screenshot again I can see it fails when one of the keys are missing
@alpox thanks for your rubber ducking, not an issue with malli I had 2 schmeas with similar name and was updating the wrong one π
I constantly get the feeling that I'm missing a schema to talk about map schemas in terms of key-value pairs
an annoying example to implement is mutual exclusion, such as a map which can have x, y and (z or u)
Hear hear. I think something like malli-keys-relations
should be there. With qualified keywords, itβs less boilerplate (but, still has):
[:or
[:map ::x ::y ::z]
[:map ::x ::y ::u]]
β¦ and the mandatory JSON Schema way for this: https://json-schema.org/understanding-json-schema/reference/conditionals.html
If we had it we could define JSON Schema with malli (translating the ebnf is straightforward), then define encoders and decoders to transform between the two
added a video of the new function instrumention. three apis: advanced, normal users and for the lazy: https://github.com/metosin/malli/pull/471