cooplan_definition_consumer/
lib.rs1use 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}