xerv_nodes/triggers/
mod.rs1mod cron;
15mod filesystem;
16mod kafka;
17mod manual;
18mod memory;
19mod queue;
20mod webhook;
21
22pub use self::cron::CronTrigger;
23pub use filesystem::FilesystemTrigger;
24pub use kafka::KafkaTrigger;
25pub use manual::{ManualEvent, ManualFireHandle, ManualTrigger};
26pub use memory::{MemoryInjector, MemoryTrigger};
27pub use queue::{QueueHandle, QueueMessage, QueueTrigger};
28pub use webhook::WebhookTrigger;
29
30use xerv_core::error::Result;
31use xerv_core::traits::{Trigger, TriggerConfig, TriggerFactory, TriggerType};
32
33pub struct StandardTriggerFactory;
35
36impl StandardTriggerFactory {
37 pub fn new() -> Self {
39 Self
40 }
41
42 pub fn create_trigger(config: &TriggerConfig) -> Result<Box<dyn Trigger>> {
44 match config.trigger_type {
45 TriggerType::Webhook => Ok(Box::new(WebhookTrigger::from_config(config)?)),
46 TriggerType::Cron => Ok(Box::new(CronTrigger::from_config(config)?)),
47 TriggerType::Filesystem => Ok(Box::new(FilesystemTrigger::from_config(config)?)),
48 TriggerType::Queue => Ok(Box::new(QueueTrigger::from_config(config)?)),
49 TriggerType::Memory => Ok(Box::new(MemoryTrigger::from_config(config)?)),
50 TriggerType::Manual => Ok(Box::new(ManualTrigger::from_config(config)?)),
51 TriggerType::Kafka => Ok(Box::new(KafkaTrigger::from_config(config)?)),
52 }
53 }
54}
55
56impl Default for StandardTriggerFactory {
57 fn default() -> Self {
58 Self::new()
59 }
60}
61
62pub struct WebhookTriggerFactory;
64
65impl TriggerFactory for WebhookTriggerFactory {
66 fn trigger_type(&self) -> TriggerType {
67 TriggerType::Webhook
68 }
69
70 fn create(&self, config: &TriggerConfig) -> Result<Box<dyn Trigger>> {
71 Ok(Box::new(WebhookTrigger::from_config(config)?))
72 }
73}
74
75pub struct CronTriggerFactory;
77
78impl TriggerFactory for CronTriggerFactory {
79 fn trigger_type(&self) -> TriggerType {
80 TriggerType::Cron
81 }
82
83 fn create(&self, config: &TriggerConfig) -> Result<Box<dyn Trigger>> {
84 Ok(Box::new(CronTrigger::from_config(config)?))
85 }
86}
87
88pub struct FilesystemTriggerFactory;
90
91impl TriggerFactory for FilesystemTriggerFactory {
92 fn trigger_type(&self) -> TriggerType {
93 TriggerType::Filesystem
94 }
95
96 fn create(&self, config: &TriggerConfig) -> Result<Box<dyn Trigger>> {
97 Ok(Box::new(FilesystemTrigger::from_config(config)?))
98 }
99}
100
101pub struct QueueTriggerFactory;
103
104impl TriggerFactory for QueueTriggerFactory {
105 fn trigger_type(&self) -> TriggerType {
106 TriggerType::Queue
107 }
108
109 fn create(&self, config: &TriggerConfig) -> Result<Box<dyn Trigger>> {
110 Ok(Box::new(QueueTrigger::from_config(config)?))
111 }
112}
113
114pub struct MemoryTriggerFactory;
116
117impl TriggerFactory for MemoryTriggerFactory {
118 fn trigger_type(&self) -> TriggerType {
119 TriggerType::Memory
120 }
121
122 fn create(&self, config: &TriggerConfig) -> Result<Box<dyn Trigger>> {
123 Ok(Box::new(MemoryTrigger::from_config(config)?))
124 }
125}
126
127pub struct ManualTriggerFactory;
129
130impl TriggerFactory for ManualTriggerFactory {
131 fn trigger_type(&self) -> TriggerType {
132 TriggerType::Manual
133 }
134
135 fn create(&self, config: &TriggerConfig) -> Result<Box<dyn Trigger>> {
136 Ok(Box::new(ManualTrigger::from_config(config)?))
137 }
138}
139
140pub struct KafkaTriggerFactory;
142
143impl TriggerFactory for KafkaTriggerFactory {
144 fn trigger_type(&self) -> TriggerType {
145 TriggerType::Kafka
146 }
147
148 fn create(&self, config: &TriggerConfig) -> Result<Box<dyn Trigger>> {
149 Ok(Box::new(KafkaTrigger::from_config(config)?))
150 }
151}