cooplan_definition_consumer/
lib.rs

1use crate::config::consumer_config;
2use crate::error::{Error, ErrorKind};
3use crate::logic::actions::definition_storage_action::DefinitionStorageAction;
4use async_channel::Sender;
5use cooplan_auth::identity::Identity;
6use cooplan_lapin_wrapper::config::api_consumer;
7use cooplan_state_tracker::state_tracker_client::StateTrackerClient;
8use std::sync::Arc;
9
10pub mod config;
11pub mod error;
12pub mod logic;
13pub mod storage;
14
15pub async fn initialize_api_consumer(
16    consumer_config_file: &str,
17    api_consumer_file: &str,
18    state_tracker_client: StateTrackerClient,
19    identity: Arc<Identity>,
20) -> Result<Sender<DefinitionStorageAction>, Error> {
21    let consumer_config = match consumer_config::try_generate(consumer_config_file).await {
22        Ok(consumer_config) => consumer_config,
23        Err(error) => {
24            return Err(Error::new(
25                ErrorKind::AutoConfigFailure,
26                format!("failed to generate consumer config: {}", error),
27            ))
28        }
29    };
30
31    let api_consumer = match api_consumer::try_get(api_consumer_file).await {
32        Ok(api_consumer) => api_consumer,
33        Err(error) => {
34            return Err(Error::new(
35                ErrorKind::AutoConfigFailure,
36                format!("failed to generate api consumer config: {}", error),
37            ))
38        }
39    };
40
41    let (sender, receiver) = async_channel::bounded(consumer_config.request_boundary());
42
43    storage::init::initialize(
44        receiver,
45        consumer_config,
46        api_consumer,
47        identity,
48        state_tracker_client,
49    )
50    .await?;
51
52    Ok(sender)
53}