juxt / aero

A small library for explicit, intentful configuration.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Integrate with clojure.spec

malcolmsparks opened this issue · comments

Integration can be as simple as:

(def config
  (let [cfg  (aero/read-config (io/resource "config.edn"))]
    (if-not (spec/valid? ::conf-spec/config cfg)
      (throw (Exception. (spec/explain-str ::conf-spec/config cfg)))
      ;; if config is valid, return the map
      cfg)))

That's actually what I use in my codebase, albeit slightly modified (I removed mount's defstate and some custom error handling stuff, but the gist is the same).

::conf-spec/config is another namespace that is dedicated to specing my config map. It works really well for me.