amqp_api_server/api/
initialization_package.rs

1use crate::api::input::input_element::InputElement;
2use crate::error::Error;
3use async_channel::Sender;
4use state_tracker::state_tracker_client::StateTrackerClient;
5use serde_json::Value;
6use crate::config::api::Api;
7use crate::config::config::Config;
8
9use super::output::amqp_output_element::AmqpOutputElement;
10
11pub type InputRegistration<LogicRequestType> =
12    Box<dyn FnOnce(&Api) -> Result<Vec<InputElement<LogicRequestType>>, Error> + Send + Sync>;
13pub type OutputRegistration =
14    Box<dyn FnOnce(&Api, StateTrackerClient) -> Result<Vec<AmqpOutputElement>, Error> + Send + Sync>;
15
16pub struct InitializationPackage<LogicRequestType> {
17    pub logic_request_sender: Sender<LogicRequestType>,
18    pub input_registration: InputRegistration<LogicRequestType>,
19    pub output_receiver: tokio::sync::mpsc::Receiver<(String, Value)>,
20    pub output_registration: OutputRegistration,
21    pub api: Api,
22    pub config: Config,
23    pub state_tracker_client: StateTrackerClient
24}
25
26impl<LogicRequestType> InitializationPackage<LogicRequestType> {
27    pub fn new(
28        logic_request_sender: Sender<LogicRequestType>,
29        input_registration: InputRegistration<LogicRequestType>,
30        output_receiver: tokio::sync::mpsc::Receiver<(String, Value)>,
31        output_registration: OutputRegistration,
32        api: Api,
33        config: Config,
34        state_tracker_client: StateTrackerClient
35    ) -> InitializationPackage<LogicRequestType> {
36        InitializationPackage {
37            logic_request_sender,
38            input_registration,
39            output_receiver,
40            output_registration,
41            api,
42            config,
43            state_tracker_client
44        }
45    }
46
47    pub fn logic_request_sender(&self) -> Sender<LogicRequestType> {
48        self.logic_request_sender.clone()
49    }
50}