@@ -16,7 +16,8 @@
|
||||
[com.rpl.specter.zipper :as sz]
|
||||
[net.deertopia.doerg.common :as common]
|
||||
[net.deertopia.doerg.config :as cfg]
|
||||
[spec-dict.main :refer [dict]])
|
||||
[spec-dict.main :refer [dict]]
|
||||
[clojure.tools.logging :as l])
|
||||
(:import
|
||||
(java.util UUID)))
|
||||
|
||||
@@ -334,6 +335,16 @@
|
||||
(defmulti object-spec :type)
|
||||
(defmulti recursive-object-spec :type)
|
||||
(defmulti element-spec :type)
|
||||
(defmulti greater-element-spec :type)
|
||||
|
||||
(defn- unimplemented-spec [x]
|
||||
(lr/warnf "unimplemented method for %s" (:type x))
|
||||
any?)
|
||||
|
||||
(defmethod object-spec :default [x] (unimplemented-spec x))
|
||||
(defmethod recursive-object-spec :default [x] (unimplemented-spec x))
|
||||
(defmethod greater-element-spec :default [x] (unimplemented-spec x))
|
||||
(defmethod element-spec :default [x] (unimplemented-spec x))
|
||||
|
||||
(def ^:private nfe
|
||||
"NFE — “no further expectations.” Used in sub-specs of `::element`
|
||||
@@ -342,35 +353,28 @@
|
||||
(s/with-gen (constantly true)
|
||||
(constantly (gen/return {}))))
|
||||
|
||||
(s/def ::object-base
|
||||
(dict {:type ::object-type}))
|
||||
(s/def ::object
|
||||
(s/multi-spec object-spec :type))
|
||||
|
||||
(s/def ::element-base
|
||||
(dict ^:opt {:contents-begin ::contents-begin
|
||||
:contents-end ::contents-end}
|
||||
{:children (s/coll-of ::object :kind vector?)
|
||||
:type ::element-type}))
|
||||
(s/def ::element
|
||||
(s/merge (dict ^:opt {:contents-begin ::contents-begin
|
||||
:contents-end ::contents-end}
|
||||
{:children (s/coll-of ::object :kind vector?)})
|
||||
(s/multi-spec element-spec :type)))
|
||||
|
||||
(s/def ::greater-element-base
|
||||
(dict {:contents-begin ::contents-begin
|
||||
:contents-end ::contents-end
|
||||
:children (s/coll-of ::object :kind vector?)
|
||||
:type ::greater-element-type}))
|
||||
(s/def ::greater-element
|
||||
(s/merge (dict {:contents-begin ::contents-begin
|
||||
:contents-end ::contents-end
|
||||
:children (s/coll-of
|
||||
(s/or :element ::element
|
||||
:greater-element ::greater-element)
|
||||
:kind vector?)})
|
||||
(s/multi-spec greater-element-spec :type)))
|
||||
|
||||
(s/def ::recursive-object-base
|
||||
(dict ^:opt {:contents-begin ::contents-begin
|
||||
:contents-end ::contents-end}
|
||||
{:children (s/coll-of ::object :kind vector?)
|
||||
#_#_
|
||||
:type ::recursive-object-type}))
|
||||
|
||||
(s/def ::object
|
||||
(s/merge ::object-base
|
||||
(s/multi-spec object-spec :type)))
|
||||
|
||||
(s/def ::recursive-object
|
||||
(s/merge ::recursive-object-base
|
||||
(s/multi-spec recursive-object-spec :type)))
|
||||
{:children (s/coll-of ::object-base :kind vector?)}))
|
||||
|
||||
(s/def ::todo-keyword string?)
|
||||
(s/def ::priority string?)
|
||||
@@ -392,8 +396,7 @@
|
||||
|
||||
;;; Specs (specific elements)
|
||||
|
||||
#_
|
||||
(defmethod node-spec "headline" [_]
|
||||
(defmethod element-spec "headline" [_]
|
||||
(dict {:todo-keyword (s/nilable ::todo-keyword)
|
||||
:priority (s/nilable ::priority)
|
||||
:level ::level
|
||||
@@ -404,7 +407,6 @@
|
||||
|
||||
;;; Specs (specific greater elements)
|
||||
|
||||
#_#_
|
||||
(defmethod node-spec "org-data" [_] nfe)
|
||||
(defmethod greater-element-spec "org-data" [_] nfe)
|
||||
|
||||
(defmethod node-spec "section" [_] nfe)
|
||||
(defmethod greater-element-spec "section" [_] nfe)
|
||||
|
||||
Reference in New Issue
Block a user