-
Notifications
You must be signed in to change notification settings - Fork 1
/
sqs.clj
40 lines (31 loc) · 1.29 KB
/
sqs.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
(ns pedestal.sqs
(:gen-class)
(:require [clojure.spec.alpha :as s]
[clojure.spec.gen.alpha :as gen]))
(s/def ::sqs-start-fn fn?)
(s/def ::sqs-stop-fn fn?)
(s/def ::client map?)
(s/def ::configurations map?)
(defn- gen-queue-fn
[]
(gen/return identity))
(s/def ::queue-fn (s/spec fn?
:gen gen-queue-fn))
(s/def ::listener (s/cat :queue-name (s/and
string?
#(not (empty? %))
#(not (clojure.string/blank? %)))
:queue-fn ::queue-fn
:queue-configurations (s/& map?)))
;; reference in https://stackoverflow.com/questions/46135111/how-to-check-distinct-id-in-spec-coll-of?answertab=votes#tab-top
(s/def ::listeners (s/and
(s/coll-of ::listener)
#(if (empty? %) true (apply distinct? (mapv :queue-name %)))))
(s/def ::service-map-in (s/keys :req [::listeners ::client]
:opt [::configurations]))
;; reference in https://github.com/cognitect-labs/pedestal.kafka/blob/master/src/com/cognitect/kafka.clj#L19
(defmacro service-fn [k]
`(fn [service-map#]
(if-let [f# (get service-map# ~k)]
(f# service-map#)
service-map#)))