;; lib/mod/api.sx — report registry + public entry points. ;; ;; mod/report files a report (assigning a sequential id) into the in-memory ;; registry; mod/decide resolves an id and runs the policy engine against the ;; current registry and rule set. (define mod/*reports* (list)) (define mod/*counter* 0) (define mod/*rules* mod/default-rules) (define mod/reset! (fn () (begin (set! mod/*reports* (list)) (set! mod/*counter* 0)))) (define mod/report (fn (by about reason) (begin (set! mod/*counter* (+ mod/*counter* 1)) (let ((id (str "r" mod/*counter*))) (let ((r (mod/mk-report id by about reason))) (begin (append! mod/*reports* r) r)))))) (define mod/get-report (fn (id) (reduce (fn (acc r) (if (= (mod/report-id r) id) r acc)) nil mod/*reports*))) (define mod/decide (fn (id) (let ((r (mod/get-report id))) (if (nil? r) nil (mod/decide-report r mod/*reports* mod/*rules*)))))