(ns ch.lyrion.rpg-engine.validation (:require [clojure.edn :as edn] [ch.lyrion.rpg-engine.util :as util] [mount.core :refer [defstate]] [malli.core :as m])) (defn load-validation-file [path] (let [valfile (-> path slurp edn/read-string)] {(:name valfile) (:validator valfile)})) (defn load-validation-files [] (let [files (util/load-filelist-in-dir "validators")] (reduce #(merge %1 (load-validation-file %2)) {} files))) (defstate registry :start (merge (m/class-schemas) (m/comparator-schemas) (m/base-schemas) (m/default-schemas) (m/predicate-schemas) (load-validation-files))) (defn validate [spec value] (m/validate spec value {:registry registry})) (defn validator [spec] (m/validator spec {:registry registry}))