use std::sync::Arc;
use crate::application::service::IssueService;
use crate::application::service::ServiceLevelAgreementService;
use crate::application::service::ServiceLevelPriorityService;
use crate::application::service::WarrantyClaimService;
#[derive(Clone)]
pub struct AppState {
pub issue_service: Arc<IssueService>,
pub service_level_agreement_service: Arc<ServiceLevelAgreementService>,
pub service_level_priority_service: Arc<ServiceLevelPriorityService>,
pub warranty_claim_service: Arc<WarrantyClaimService>,
}
impl AppState {
pub fn new(
issue_service: Arc<IssueService>,
service_level_agreement_service: Arc<ServiceLevelAgreementService>,
service_level_priority_service: Arc<ServiceLevelPriorityService>,
warranty_claim_service: Arc<WarrantyClaimService>
) -> Self {
Self {
issue_service,
service_level_agreement_service,
service_level_priority_service,
warranty_claim_service,
}
}
pub fn from_module(module: &crate::SupportModule) -> Self {
Self {
issue_service: module.issue_service.clone(),
service_level_agreement_service: module.service_level_agreement_service.clone(),
service_level_priority_service: module.service_level_priority_service.clone(),
warranty_claim_service: module.warranty_claim_service.clone(),
}
}
}
#[derive(Default)]
pub struct AppStateBuilder {
issue_service: Option<Arc<IssueService>>,
service_level_agreement_service: Option<Arc<ServiceLevelAgreementService>>,
service_level_priority_service: Option<Arc<ServiceLevelPriorityService>>,
warranty_claim_service: Option<Arc<WarrantyClaimService>>,
}
impl AppStateBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn with_issue_service(mut self, service: Arc<IssueService>) -> Self {
self.issue_service = Some(service);
self
}
pub fn with_service_level_agreement_service(mut self, service: Arc<ServiceLevelAgreementService>) -> Self {
self.service_level_agreement_service = Some(service);
self
}
pub fn with_service_level_priority_service(mut self, service: Arc<ServiceLevelPriorityService>) -> Self {
self.service_level_priority_service = Some(service);
self
}
pub fn with_warranty_claim_service(mut self, service: Arc<WarrantyClaimService>) -> Self {
self.warranty_claim_service = Some(service);
self
}
pub fn build(self) -> AppState {
AppState {
issue_service: self.issue_service.expect("issue_service is required"),
service_level_agreement_service: self.service_level_agreement_service.expect("service_level_agreement_service is required"),
service_level_priority_service: self.service_level_priority_service.expect("service_level_priority_service is required"),
warranty_claim_service: self.warranty_claim_service.expect("warranty_claim_service is required"),
}
}
}