2

This is my payload.

(m/validate readingDetails-schema 
{:readingCode : "Code1",
  :readingNumber : "twenty two round off",
  :readingCheck : "First",
  :readings : [{
    :readingDate : "2021-05-02",
    :readingType : "first check",
    :readingPrecision : "two decimals check",
    :readingEstimate : "Check"}]})
 

This is my first schema:

(def reading-schema (m/schema            [:map
                                          [:readingDate :re #"\d{4}-\d{2}-\d{2}"]
                                          [:readingType string?]
                                          [:readingPrecision decimal?]
                                          [:readingEstimate string?]]))
=> #'interest-malli-test.core/reading-schema

Now this is the main schema, which must include the above schema.

(def readingDetails-schema                  [:merge
                                               #ref [:reading-schema]
                                               [:map
                                                [:readingCode string?]
                                                [:readingNumber string?]
                                                [:readingCheck string?]
                                                [<how to add a list of reading-schema here?>]
                                                ]])

I'm trying like this.

(def readingDetails-schema                  [:merge
                                                   #ref [:reading-schema]
                                                   [:map
                                                    [:readingCode string?]
                                                    [:readingNumber string?]
                                                    [:readingCheck string?]
                                                    [[:vector #ref [:reading-schema]]
                                                    ]])
Blaze
  • 368
  • 1
  • 10

1 Answers1

2

After you convert the payload into Clojure data structures, just use the name of the first schema in the second one (and change decimal? into string?).

Dependencies: [metosin/malli "0.8.9"]

Require: [malli.core :as m]

(def reading-schema
  [:map
   [:readingDate :re #"\d{4}-\d{2}-\d{2}"]
   [:readingType string?]
   [:readingPrecision string?]
   [:readingEstimate string?]])

(def readingDetails-schema
  [:map
   [:readingCode string?]
   [:readingNumber string?]
   [:readingCheck string?]
   [:readings [:vector reading-schema]]])

(m/validate readingDetails-schema
            {:readingCode   "Code1",
             :readingNumber "twenty two round off",
             :readingCheck  "First",
             :readings      [{:readingDate      "2021-05-02",
                              :readingType      "first check",
                              :readingPrecision "two decimals check",
                              :readingEstimate  "Check"}]})

=> true
Martin Půda
  • 7,353
  • 2
  • 6
  • 13