drasi_core/evaluation/functions/future/
mod.rs

1// Copyright 2024 The Drasi Authors.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use 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}