/
event_source.clj
40 lines (31 loc) · 1.3 KB
/
event_source.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 crucible.aws.serverless.function.event-source
(:require [crucible.aws.serverless :as sam]
[crucible.aws.serverless.function.event-source.api :as api]
[crucible.aws.serverless.function.event-source.kinesis :as kinesis]
[crucible.aws.serverless.function.event-source.schedule :as schedule]
[crucible.aws.serverless.function.event-source.sns :as sns]
[crucible.aws.serverless.function.event-source.sqs :as sqs]
[crucible.resources :refer [spec-or-ref defresource]]
[clojure.spec.alpha :as s]))
(s/def ::type
#{"S3" "SNS" "Kinesis" "DynamoDB" "Api" "Schedule" "CloudWatchEvent" "CloudWatchLogs"})
(defmulti event-source ::type)
(defmethod event-source "Kinesis" [_]
(s/keys :req [::type
::kinesis/properties]))
(defmethod event-source "Schedule" [_]
(s/keys :req [::type
::schedule/properties]))
(defmethod event-source "Api" [_]
(s/keys :req [::type
::api/properties]))
(defmethod event-source "SNS" [_]
(s/keys :req [::type
::sns/properties]))
(defmethod event-source "SQS" [_]
(s/keys :req [::type
::sqs/properties]))
(defmethod event-source :default [_]
(s/keys :req [::type]))
(s/def ::event-source
(s/multi-spec event-source ::type))