use std::sync::Arc;
use crate::application::service::DigestDigestService;
use crate::application::service::DigestSubscriptionService;
use crate::application::service::DigestDigestKpiService;
use crate::application::service::DigestTipService;
use crate::application::service::DigestTipUserService;
#[derive(Clone)]
pub struct AppState {
pub digest_digest_service: Arc<DigestDigestService>,
pub digest_subscription_service: Arc<DigestSubscriptionService>,
pub digest_digest_kpi_service: Arc<DigestDigestKpiService>,
pub digest_tip_service: Arc<DigestTipService>,
pub digest_tip_user_service: Arc<DigestTipUserService>,
}
impl AppState {
pub fn new(
digest_digest_service: Arc<DigestDigestService>,
digest_subscription_service: Arc<DigestSubscriptionService>,
digest_digest_kpi_service: Arc<DigestDigestKpiService>,
digest_tip_service: Arc<DigestTipService>,
digest_tip_user_service: Arc<DigestTipUserService>
) -> Self {
Self {
digest_digest_service,
digest_subscription_service,
digest_digest_kpi_service,
digest_tip_service,
digest_tip_user_service,
}
}
pub fn from_module(module: &crate::DigestModule) -> Self {
Self {
digest_digest_service: module.digest_digest_service.clone(),
digest_subscription_service: module.digest_subscription_service.clone(),
digest_digest_kpi_service: module.digest_digest_kpi_service.clone(),
digest_tip_service: module.digest_tip_service.clone(),
digest_tip_user_service: module.digest_tip_user_service.clone(),
}
}
}
#[derive(Default)]
pub struct AppStateBuilder {
digest_digest_service: Option<Arc<DigestDigestService>>,
digest_subscription_service: Option<Arc<DigestSubscriptionService>>,
digest_digest_kpi_service: Option<Arc<DigestDigestKpiService>>,
digest_tip_service: Option<Arc<DigestTipService>>,
digest_tip_user_service: Option<Arc<DigestTipUserService>>,
}
impl AppStateBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn with_digest_digest_service(mut self, service: Arc<DigestDigestService>) -> Self {
self.digest_digest_service = Some(service);
self
}
pub fn with_digest_subscription_service(mut self, service: Arc<DigestSubscriptionService>) -> Self {
self.digest_subscription_service = Some(service);
self
}
pub fn with_digest_digest_kpi_service(mut self, service: Arc<DigestDigestKpiService>) -> Self {
self.digest_digest_kpi_service = Some(service);
self
}
pub fn with_digest_tip_service(mut self, service: Arc<DigestTipService>) -> Self {
self.digest_tip_service = Some(service);
self
}
pub fn with_digest_tip_user_service(mut self, service: Arc<DigestTipUserService>) -> Self {
self.digest_tip_user_service = Some(service);
self
}
pub fn build(self) -> AppState {
AppState {
digest_digest_service: self.digest_digest_service.expect("digest_digest_service is required"),
digest_subscription_service: self.digest_subscription_service.expect("digest_subscription_service is required"),
digest_digest_kpi_service: self.digest_digest_kpi_service.expect("digest_digest_kpi_service is required"),
digest_tip_service: self.digest_tip_service.expect("digest_tip_service is required"),
digest_tip_user_service: self.digest_tip_user_service.expect("digest_tip_user_service is required"),
}
}
}