use std::sync::Arc;
use crate::application::service::IntegrationConnectorService;
use crate::application::service::IntegrationAccountService;
use crate::application::service::IntegrationEventService;
#[derive(Clone)]
pub struct AppState {
pub integration_connector_service: Arc<IntegrationConnectorService>,
pub integration_account_service: Arc<IntegrationAccountService>,
pub integration_event_service: Arc<IntegrationEventService>,
}
impl AppState {
pub fn new(
integration_connector_service: Arc<IntegrationConnectorService>,
integration_account_service: Arc<IntegrationAccountService>,
integration_event_service: Arc<IntegrationEventService>
) -> Self {
Self {
integration_connector_service,
integration_account_service,
integration_event_service,
}
}
pub fn from_module(module: &crate::IntegrationsModule) -> Self {
Self {
integration_connector_service: module.integration_connector_service.clone(),
integration_account_service: module.integration_account_service.clone(),
integration_event_service: module.integration_event_service.clone(),
}
}
}
#[derive(Default)]
pub struct AppStateBuilder {
integration_connector_service: Option<Arc<IntegrationConnectorService>>,
integration_account_service: Option<Arc<IntegrationAccountService>>,
integration_event_service: Option<Arc<IntegrationEventService>>,
}
impl AppStateBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn with_integration_connector_service(mut self, service: Arc<IntegrationConnectorService>) -> Self {
self.integration_connector_service = Some(service);
self
}
pub fn with_integration_account_service(mut self, service: Arc<IntegrationAccountService>) -> Self {
self.integration_account_service = Some(service);
self
}
pub fn with_integration_event_service(mut self, service: Arc<IntegrationEventService>) -> Self {
self.integration_event_service = Some(service);
self
}
pub fn build(self) -> AppState {
AppState {
integration_connector_service: self.integration_connector_service.expect("integration_connector_service is required"),
integration_account_service: self.integration_account_service.expect("integration_account_service is required"),
integration_event_service: self.integration_event_service.expect("integration_event_service is required"),
}
}
}