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}