Спецификация Clojure принуждает значение вложенной карты

Я принуждаю значение карты следующим образом:

(require '[clojure.spec :as s])

(defn x-integer? [x]
  (cond
    (integer? x) x
    (string? x) (try
                  (Integer/parseInt x)
                  (catch Exception e
                    :clojure.spec/invalid))
    :else :clojure.spec/invalid))

(s/def ::port (s/conformer x-integer?))

(s/def ::config (s/keys :req [::port]))

(s/conform ::config {::port "12345"}) ;;=> #:my.ns{:port "12345"}

Однако я не понимаю, как я мог бы сделать то же самое со следующей картой:

(s/conform ::config {::nested-data {:port "12345"}}) ;;=> something like that maybe ? #:my.ns/nested-data{:port 12345}

Как следует определить ::config? Кроме того, было бы предпочтительнее иметь {::nested-data {::port "12345"}} вместо этого?


person nha    schedule 17.07.2016    source источник
comment
Похоже, вам не хватает спецификации ::port, которая использует x-integer? Этот пример кажется неполным.   -  person Alex Miller    schedule 18.07.2016
comment
@AlexMiller, вы правы, вопрос отредактирован.   -  person nha    schedule 18.07.2016