use std::sync::Arc;
use crate::application::service::MaintenanceRequestService;
use crate::application::service::MaintenanceScheduleService;
use crate::application::service::MaintenanceStageService;
use crate::application::service::MaintenanceVisitService;
use crate::application::service::MaintenanceVisitPartService;
#[derive(Clone)]
pub struct AppState {
pub maintenance_request_service: Arc<MaintenanceRequestService>,
pub maintenance_schedule_service: Arc<MaintenanceScheduleService>,
pub maintenance_stage_service: Arc<MaintenanceStageService>,
pub maintenance_visit_service: Arc<MaintenanceVisitService>,
pub maintenance_visit_part_service: Arc<MaintenanceVisitPartService>,
}
impl AppState {
pub fn new(
maintenance_request_service: Arc<MaintenanceRequestService>,
maintenance_schedule_service: Arc<MaintenanceScheduleService>,
maintenance_stage_service: Arc<MaintenanceStageService>,
maintenance_visit_service: Arc<MaintenanceVisitService>,
maintenance_visit_part_service: Arc<MaintenanceVisitPartService>
) -> Self {
Self {
maintenance_request_service,
maintenance_schedule_service,
maintenance_stage_service,
maintenance_visit_service,
maintenance_visit_part_service,
}
}
pub fn from_module(module: &crate::MaintenanceModule) -> Self {
Self {
maintenance_request_service: module.maintenance_request_service.clone(),
maintenance_schedule_service: module.maintenance_schedule_service.clone(),
maintenance_stage_service: module.maintenance_stage_service.clone(),
maintenance_visit_service: module.maintenance_visit_service.clone(),
maintenance_visit_part_service: module.maintenance_visit_part_service.clone(),
}
}
}
#[derive(Default)]
pub struct AppStateBuilder {
maintenance_request_service: Option<Arc<MaintenanceRequestService>>,
maintenance_schedule_service: Option<Arc<MaintenanceScheduleService>>,
maintenance_stage_service: Option<Arc<MaintenanceStageService>>,
maintenance_visit_service: Option<Arc<MaintenanceVisitService>>,
maintenance_visit_part_service: Option<Arc<MaintenanceVisitPartService>>,
}
impl AppStateBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn with_maintenance_request_service(mut self, service: Arc<MaintenanceRequestService>) -> Self {
self.maintenance_request_service = Some(service);
self
}
pub fn with_maintenance_schedule_service(mut self, service: Arc<MaintenanceScheduleService>) -> Self {
self.maintenance_schedule_service = Some(service);
self
}
pub fn with_maintenance_stage_service(mut self, service: Arc<MaintenanceStageService>) -> Self {
self.maintenance_stage_service = Some(service);
self
}
pub fn with_maintenance_visit_service(mut self, service: Arc<MaintenanceVisitService>) -> Self {
self.maintenance_visit_service = Some(service);
self
}
pub fn with_maintenance_visit_part_service(mut self, service: Arc<MaintenanceVisitPartService>) -> Self {
self.maintenance_visit_part_service = Some(service);
self
}
pub fn build(self) -> AppState {
AppState {
maintenance_request_service: self.maintenance_request_service.expect("maintenance_request_service is required"),
maintenance_schedule_service: self.maintenance_schedule_service.expect("maintenance_schedule_service is required"),
maintenance_stage_service: self.maintenance_stage_service.expect("maintenance_stage_service is required"),
maintenance_visit_service: self.maintenance_visit_service.expect("maintenance_visit_service is required"),
maintenance_visit_part_service: self.maintenance_visit_part_service.expect("maintenance_visit_part_service is required"),
}
}
}