30 lines
852 B
Clojure
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}))
|