Skip to main content

workflow_core/
trigger.rs

1/// re-exports triggered crate as well as
2/// two wrappers SingleTrigger and ReqRespTrigger
3pub use triggered::*;
4
5// use triggered::{Trigger,Listener};
6
7/// Wrapper containing a single Trigger instance
8#[derive(Debug, Clone)]
9pub struct SingleTrigger {
10    /// Handle used to fire the trigger.
11    pub trigger: Trigger,
12    /// Handle awaited by consumers waiting for the trigger to fire.
13    pub listener: Listener,
14}
15
16impl SingleTrigger {
17    /// Creates a new trigger/listener pair wrapped in a [`SingleTrigger`].
18    pub fn new() -> SingleTrigger {
19        let (trigger, listener) = triggered::trigger();
20        SingleTrigger { trigger, listener }
21    }
22}
23
24impl Default for SingleTrigger {
25    fn default() -> Self {
26        Self::new()
27    }
28}
29
30/// Bi-directional trigger meant to function in
31/// request/response fashion
32#[derive(Debug, Clone)]
33pub struct ReqRespTrigger {
34    /// Trigger fired to signal a request.
35    pub request: SingleTrigger,
36    /// Trigger fired to signal the corresponding response.
37    pub response: SingleTrigger,
38}
39
40impl ReqRespTrigger {
41    /// Creates a new bi-directional request/response trigger pair.
42    pub fn new() -> ReqRespTrigger {
43        ReqRespTrigger {
44            request: SingleTrigger::new(),
45            response: SingleTrigger::new(),
46        }
47    }
48}
49
50impl Default for ReqRespTrigger {
51    fn default() -> Self {
52        Self::new()
53    }
54}