This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2020-11-23
Channels
- # aws (3)
- # babashka (17)
- # beginners (44)
- # boot (1)
- # bristol-clojurians (1)
- # cider (19)
- # clj-kondo (7)
- # cljfx (5)
- # clojure (35)
- # clojure-australia (25)
- # clojure-europe (41)
- # clojure-nl (4)
- # clojure-spec (5)
- # clojure-uk (104)
- # clojuredesign-podcast (1)
- # clojurescript (41)
- # component (6)
- # conjure (5)
- # core-async (20)
- # core-logic (5)
- # cryogen (7)
- # cursive (4)
- # data-science (1)
- # datomic (14)
- # devcards (2)
- # events (1)
- # fulcro (6)
- # helix (6)
- # jobs (4)
- # kaocha (4)
- # lambdaisland (4)
- # leiningen (3)
- # luminus (1)
- # malli (2)
- # meander (2)
- # mount (6)
- # off-topic (2)
- # pedestal (25)
- # rdf (1)
- # re-frame (17)
- # reagent (5)
- # releases (1)
- # reveal (13)
- # rewrite-clj (45)
- # shadow-cljs (27)
- # sql (18)
- # tools-deps (93)
- # vim (13)
- # xtdb (11)
playing with :=>
generators. also good peek at the syntax options (using children vs properties):
(def Age
[:int {:min 18, :max 100}])
(def User
[:map
[:name string?]
[:age Age]
[:skills [:set [:enum "clj" "cljs" "rust" "go" "cobol"]]]])
;; option1: childs
(def create-user
[:=> {:gen/=> '(fn [[age] user] (assoc user :age age))}
[:tuple Age] User])
;; option2: properties
(def create-user
[:=> {:gen/=> '(fn [[age] user] (assoc user :age age))
:input [:tuple Age]
:output User}])
(mg/generate User {:size 10})
; => {:name "Szf5sN", :age 21, :skills #{"cobol" "rust" "cljs" "clj" "go"}}
(def create-user-gen (mg/generate create-user {:size 10}))
(create-user-gen 46)
; => {:name "Itu96", :age 46, :skills #{"cobol" "rust" "cljs" "clj" "go"}}
👏 3
also, validating functions against definitions:
(def Age
[:int {:min 18, :max 100}])
(def User
[:map
[:name string?]
[:age Age]
[:skills [:set [:enum "clj" "cljs" "rust" "go" "cobol"]]]])
(mg/generate User {:size 10})
; => {:name "Szf5sN", :age 21, :skills #{"cobol" "rust" "cljs" "clj" "go"}}
(def create-user [:=> [:tuple Age] User])
(m/validate
create-user
(fn [age] {:name "elephant", :age age, :skills #{"cobol"}})
{::m/=>validator mg/=>validator})
; => true
;; invalid return
(m/validate
create-user
(fn [age] {:name "elephant", :age age, :skills #{"PERL"}})
{::m/=>validator mg/=>validator})
; => false
;; invalid arity
(m/validate
create-user
(fn [age _extra] {:name "elephant", :age age, :skills #{"cobol"}})
{::m/=>validator mg/=>validator})
; => false
🔥 3