drasi_core/evaluation/functions/future/
mod.rs1use std::sync::{Arc, Weak};
16
17use crate::{
18 evaluation::ExpressionEvaluator,
19 interface::{FutureQueue, ResultIndex},
20};
21
22use self::{future_element::FutureElement, true_for::TrueFor, true_until::TrueUntil};
23
24use super::{Function, FunctionRegistry};
25
26mod awaiting;
27mod future_element;
28mod true_for;
29mod true_later;
30mod true_until;
31
32pub trait RegisterFutureFunctions {
33 fn register_future_functions(
34 &self,
35 future_queue: Arc<dyn FutureQueue>,
36 result_index: Arc<dyn ResultIndex>,
37 expression_evaluator: Weak<ExpressionEvaluator>,
38 );
39}
40
41impl RegisterFutureFunctions for FunctionRegistry {
42 fn register_future_functions(
43 &self,
44 future_queue: Arc<dyn FutureQueue>,
45 result_index: Arc<dyn ResultIndex>,
46 expression_evaluator: Weak<ExpressionEvaluator>,
47 ) {
48 self.register_function(
49 "drasi.awaiting",
50 Function::Scalar(Arc::new(awaiting::Awaiting::new())),
51 );
52
53 self.register_function(
54 "drasi.future",
55 Function::Scalar(Arc::new(FutureElement::new(future_queue.clone()))),
56 );
57
58 self.register_function(
59 "drasi.trueUntil",
60 Function::Scalar(Arc::new(TrueUntil::new(future_queue.clone()))),
61 );
62
63 self.register_function(
64 "drasi.trueFor",
65 Function::Scalar(Arc::new(TrueFor::new(
66 future_queue.clone(),
67 result_index.clone(),
68 expression_evaluator.clone(),
69 ))),
70 );
71
72 self.register_function(
73 "drasi.trueLater",
74 Function::Scalar(Arc::new(true_later::TrueLater::new(future_queue.clone()))),
75 );
76 }
77}