rpg-engine/src/ch/lyrion/rpg-engine/validation.clj

30 lines
852 B
Clojure

(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}))