Skip to content

Commit

Permalink
Merge pull request #1058 from frenchy64/encoders-doc
Browse files Browse the repository at this point in the history
Improve doc for transformers
  • Loading branch information
ikitommi committed Jun 4, 2024
2 parents 4063182 + e5b5284 commit c4ff7b1
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 0 deletions.
43 changes: 43 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1138,6 +1138,49 @@ Going crazy:
; => {:x 24}
```

`:and` accumulates the transformed value left-to-right.

```clojure
(m/decode
[:and
[:string {:decode/string '{:enter #(str "1_" %), :leave #(str % "_2")}}]
[:string {:decode/string '{:enter #(str "3_" %), :leave #(str % "_4")}}]]
"kerran" mt/string-transformer)
;; => "3_1_kerran_2_4"
```

`:or` transforms using the first successful schema, left-to-right.

```clojure
(m/decode
[:or
[:string {:decode/string '{:enter #(str "1_" %), :leave #(str % "_2")}}]
[:string {:decode/string '{:enter #(str "3_" %), :leave #(str % "_4")}}]]
"kerran" mt/string-transformer)
;; => "1_kerran_2"

(m/decode
[:or
:map
[:string {:decode/string '{:enter #(str "3_" %), :leave #(str % "_4")}}]]
"kerran" mt/string-transformer)
;; => "3_kerran_4"
```

Proxy schemas like `:merge` and `:union` transform as if `m/deref`ed.

```clojure
(m/decode
[:merge
[:map [:name [:string {:default "kikka"}]] ]
[:map [:description {:optional true} [:string {:default "kikka"}]]]]
{}
{:registry (merge (mu/schemas) (m/default-schemas))}
(mt/default-value-transformer {::mt/add-optional-keys true}))
;; => {:name "kikka"
;; :description "kikka"}
```

## To and from JSON

The `m/encode` and `m/decode` functions work on clojure data. To go
Expand Down
18 changes: 18 additions & 0 deletions test/malli/core_test.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,24 @@
(m/decode
[:and {:decode/string '{:enter #(str "olipa_" %), :leave #(str % "_avaruus")}} string?]
"kerran" mt/string-transformer)))
(is (= "3_1_kerran_2_4"
(m/decode
[:and
[:string {:decode/string '{:enter #(str "1_" %), :leave #(str % "_2")}}]
[:string {:decode/string '{:enter #(str "3_" %), :leave #(str % "_4")}}]]
"kerran" mt/string-transformer)))
(is (= "1_kerran_2"
(m/decode
[:or
[:string {:decode/string '{:enter #(str "1_" %), :leave #(str % "_2")}}]
[:string {:decode/string '{:enter #(str "3_" %), :leave #(str % "_4")}}]]
"kerran" mt/string-transformer)))
(is (= "3_kerran_4"
(m/decode
[:or
:map
[:string {:decode/string '{:enter #(str "3_" %), :leave #(str % "_4")}}]]
"kerran" mt/string-transformer)))

(doseq [schema [schema schema*]]
(is (true? (m/validate (over-the-wire schema) 1))))
Expand Down
19 changes: 19 additions & 0 deletions test/malli/util_test.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
[malli.core :as m]
[malli.impl.util :as miu]
[malli.registry :as mr]
[malli.transform :as mt]
[malli.util :as mu]))

#?(:clj (defn from-json [s]
Expand Down Expand Up @@ -1019,3 +1020,21 @@
:map
:invalid
identity))))

(deftest transform-merge-test
(is (= {:name "kikka"
:description "kikka"}
(m/decode
[:map
[:name [:string {:default "kikka"}]]
[:description {:optional true} [:string {:default "kikka"}]] ]
{}
{:registry (merge (mu/schemas) (m/default-schemas))}
(mt/default-value-transformer {::mt/add-optional-keys true}))
(m/decode
[:merge
[:map [:name [:string {:default "kikka"}]] ]
[:map [:description {:optional true} [:string {:default "kikka"}]]]]
{}
{:registry (merge (mu/schemas) (m/default-schemas))}
(mt/default-value-transformer {::mt/add-optional-keys true})))))

0 comments on commit c4ff7b1

Please sign in to comment.