amqp_api_server/api/
initialization_package.rs1use 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}