-
Notifications
You must be signed in to change notification settings - Fork 1
/
specs.clj
71 lines (56 loc) · 2.23 KB
/
specs.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
; Copyright 2024 Vivid Inc. and/or its affiliates.
;
; Licensed under the Apache License, Version 2.0 (the "License")
; you may not use this file except in compliance with the License.
; You may obtain a copy of the License at
;
; https://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing, software
; distributed under the License is distributed on an "AS IS" BASIS,
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
(ns ^:internal-api vivid.art.specs
"Clojure Spec definitions for Ash Ra Temple data structures.
All definitions exposed through ART's API plus all key
definitions are namespaced."
(:require
[clojure.spec.alpha :as s]))
; ART templates
(s/def :vivid.art/template (s/nilable string?))
; Bindings
(s/def :vivid.art/bindings map?)
; TODO Map of symbols to any ? Or, convert all top-level keys to symbols ?
; Template delimiter definitions
(s/def ::delimiter (s/and string? seq))
(s/def ::begin-forms ::delimiter)
(s/def ::end-forms ::delimiter)
(s/def ::begin-eval ::delimiter)
(s/def ::end-eval ::delimiter)
(s/def :vivid.art/delimiters
(s/keys :opt-un [::begin-forms ::end-forms
::begin-eval ::end-eval]))
; Failure descriptors
(s/def ::failure-type keyword?)
(s/def ::cause coll?)
(s/def :vivid.art/failure
(s/keys :req-un [::failure-type ::cause ::template]))
; To which phase in the (render) dataflow will it proceed to?
; Useful for diagnostics and operational insight.
(def ^:const render-phases
"NOTE: These values are unstable and subject to change."
'(:parse :translate :enscript :evaluate))
(s/def :vivid.art/render-phase (into #{} render-phases))
(defn to-phase?
"Following the ordering of rendering phases, evaluates
to true when current-phase doesn't exceed to-phase."
[current-phase to-phase]
(let [plan (-> #{}
(into (take-while #(not= to-phase %) render-phases))
(conj to-phase))]
(contains? plan current-phase)))
(s/fdef to-phase?
:args (s/cat :current-phase :vivid.art/render-phase
:to-phase :vivid.art/render-phase)
:ret (s/nilable boolean?))