use std::sync::Arc;
use crate::application::service::BoothCategoryService;
use crate::application::service::BoothService;
use crate::application::service::TypeBoothService;
use crate::application::service::BoothBookingService;
use crate::application::service::EventService;
use crate::application::service::EventTypeService;
use crate::application::service::LeadProvenanceService;
use crate::application::service::LeadProvenanceRegistrationService;
use crate::application::service::LeadRequestService;
use crate::application::service::LeadRuleService;
use crate::application::service::LeadRulePredicateService;
use crate::application::service::MailService;
use crate::application::service::MailRegistrationService;
use crate::application::service::MailSlotService;
use crate::application::service::QuestionService;
use crate::application::service::QuestionAnswerService;
use crate::application::service::RegistrationQuestionService;
use crate::application::service::RegistrationService;
use crate::application::service::RegistrationAnswerService;
use crate::application::service::SlotService;
use crate::application::service::StageService;
use crate::application::service::TagCategoryService;
use crate::application::service::TagService;
use crate::application::service::TicketService;
use crate::application::service::TypeMailService;
#[derive(Clone)]
pub struct AppState {
pub booth_category_service: Arc<BoothCategoryService>,
pub booth_service: Arc<BoothService>,
pub type_booth_service: Arc<TypeBoothService>,
pub booth_booking_service: Arc<BoothBookingService>,
pub event_service: Arc<EventService>,
pub event_type_service: Arc<EventTypeService>,
pub lead_provenance_service: Arc<LeadProvenanceService>,
pub lead_provenance_registration_service: Arc<LeadProvenanceRegistrationService>,
pub lead_request_service: Arc<LeadRequestService>,
pub lead_rule_service: Arc<LeadRuleService>,
pub lead_rule_predicate_service: Arc<LeadRulePredicateService>,
pub mail_service: Arc<MailService>,
pub mail_registration_service: Arc<MailRegistrationService>,
pub mail_slot_service: Arc<MailSlotService>,
pub question_service: Arc<QuestionService>,
pub question_answer_service: Arc<QuestionAnswerService>,
pub registration_question_service: Arc<RegistrationQuestionService>,
pub registration_service: Arc<RegistrationService>,
pub registration_answer_service: Arc<RegistrationAnswerService>,
pub slot_service: Arc<SlotService>,
pub stage_service: Arc<StageService>,
pub tag_category_service: Arc<TagCategoryService>,
pub tag_service: Arc<TagService>,
pub ticket_service: Arc<TicketService>,
pub type_mail_service: Arc<TypeMailService>,
}
impl AppState {
pub fn new(
booth_category_service: Arc<BoothCategoryService>,
booth_service: Arc<BoothService>,
type_booth_service: Arc<TypeBoothService>,
booth_booking_service: Arc<BoothBookingService>,
event_service: Arc<EventService>,
event_type_service: Arc<EventTypeService>,
lead_provenance_service: Arc<LeadProvenanceService>,
lead_provenance_registration_service: Arc<LeadProvenanceRegistrationService>,
lead_request_service: Arc<LeadRequestService>,
lead_rule_service: Arc<LeadRuleService>,
lead_rule_predicate_service: Arc<LeadRulePredicateService>,
mail_service: Arc<MailService>,
mail_registration_service: Arc<MailRegistrationService>,
mail_slot_service: Arc<MailSlotService>,
question_service: Arc<QuestionService>,
question_answer_service: Arc<QuestionAnswerService>,
registration_question_service: Arc<RegistrationQuestionService>,
registration_service: Arc<RegistrationService>,
registration_answer_service: Arc<RegistrationAnswerService>,
slot_service: Arc<SlotService>,
stage_service: Arc<StageService>,
tag_category_service: Arc<TagCategoryService>,
tag_service: Arc<TagService>,
ticket_service: Arc<TicketService>,
type_mail_service: Arc<TypeMailService>
) -> Self {
Self {
booth_category_service,
booth_service,
type_booth_service,
booth_booking_service,
event_service,
event_type_service,
lead_provenance_service,
lead_provenance_registration_service,
lead_request_service,
lead_rule_service,
lead_rule_predicate_service,
mail_service,
mail_registration_service,
mail_slot_service,
question_service,
question_answer_service,
registration_question_service,
registration_service,
registration_answer_service,
slot_service,
stage_service,
tag_category_service,
tag_service,
ticket_service,
type_mail_service,
}
}
pub fn from_module(module: &crate::EventModule) -> Self {
Self {
booth_category_service: module.booth_category_service.clone(),
booth_service: module.booth_service.clone(),
type_booth_service: module.type_booth_service.clone(),
booth_booking_service: module.booth_booking_service.clone(),
event_service: module.event_service.clone(),
event_type_service: module.event_type_service.clone(),
lead_provenance_service: module.lead_provenance_service.clone(),
lead_provenance_registration_service: module.lead_provenance_registration_service.clone(),
lead_request_service: module.lead_request_service.clone(),
lead_rule_service: module.lead_rule_service.clone(),
lead_rule_predicate_service: module.lead_rule_predicate_service.clone(),
mail_service: module.mail_service.clone(),
mail_registration_service: module.mail_registration_service.clone(),
mail_slot_service: module.mail_slot_service.clone(),
question_service: module.question_service.clone(),
question_answer_service: module.question_answer_service.clone(),
registration_question_service: module.registration_question_service.clone(),
registration_service: module.registration_service.clone(),
registration_answer_service: module.registration_answer_service.clone(),
slot_service: module.slot_service.clone(),
stage_service: module.stage_service.clone(),
tag_category_service: module.tag_category_service.clone(),
tag_service: module.tag_service.clone(),
ticket_service: module.ticket_service.clone(),
type_mail_service: module.type_mail_service.clone(),
}
}
}
#[derive(Default)]
pub struct AppStateBuilder {
booth_category_service: Option<Arc<BoothCategoryService>>,
booth_service: Option<Arc<BoothService>>,
type_booth_service: Option<Arc<TypeBoothService>>,
booth_booking_service: Option<Arc<BoothBookingService>>,
event_service: Option<Arc<EventService>>,
event_type_service: Option<Arc<EventTypeService>>,
lead_provenance_service: Option<Arc<LeadProvenanceService>>,
lead_provenance_registration_service: Option<Arc<LeadProvenanceRegistrationService>>,
lead_request_service: Option<Arc<LeadRequestService>>,
lead_rule_service: Option<Arc<LeadRuleService>>,
lead_rule_predicate_service: Option<Arc<LeadRulePredicateService>>,
mail_service: Option<Arc<MailService>>,
mail_registration_service: Option<Arc<MailRegistrationService>>,
mail_slot_service: Option<Arc<MailSlotService>>,
question_service: Option<Arc<QuestionService>>,
question_answer_service: Option<Arc<QuestionAnswerService>>,
registration_question_service: Option<Arc<RegistrationQuestionService>>,
registration_service: Option<Arc<RegistrationService>>,
registration_answer_service: Option<Arc<RegistrationAnswerService>>,
slot_service: Option<Arc<SlotService>>,
stage_service: Option<Arc<StageService>>,
tag_category_service: Option<Arc<TagCategoryService>>,
tag_service: Option<Arc<TagService>>,
ticket_service: Option<Arc<TicketService>>,
type_mail_service: Option<Arc<TypeMailService>>,
}
impl AppStateBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn with_booth_category_service(mut self, service: Arc<BoothCategoryService>) -> Self {
self.booth_category_service = Some(service);
self
}
pub fn with_booth_service(mut self, service: Arc<BoothService>) -> Self {
self.booth_service = Some(service);
self
}
pub fn with_type_booth_service(mut self, service: Arc<TypeBoothService>) -> Self {
self.type_booth_service = Some(service);
self
}
pub fn with_booth_booking_service(mut self, service: Arc<BoothBookingService>) -> Self {
self.booth_booking_service = Some(service);
self
}
pub fn with_event_service(mut self, service: Arc<EventService>) -> Self {
self.event_service = Some(service);
self
}
pub fn with_event_type_service(mut self, service: Arc<EventTypeService>) -> Self {
self.event_type_service = Some(service);
self
}
pub fn with_lead_provenance_service(mut self, service: Arc<LeadProvenanceService>) -> Self {
self.lead_provenance_service = Some(service);
self
}
pub fn with_lead_provenance_registration_service(mut self, service: Arc<LeadProvenanceRegistrationService>) -> Self {
self.lead_provenance_registration_service = Some(service);
self
}
pub fn with_lead_request_service(mut self, service: Arc<LeadRequestService>) -> Self {
self.lead_request_service = Some(service);
self
}
pub fn with_lead_rule_service(mut self, service: Arc<LeadRuleService>) -> Self {
self.lead_rule_service = Some(service);
self
}
pub fn with_lead_rule_predicate_service(mut self, service: Arc<LeadRulePredicateService>) -> Self {
self.lead_rule_predicate_service = Some(service);
self
}
pub fn with_mail_service(mut self, service: Arc<MailService>) -> Self {
self.mail_service = Some(service);
self
}
pub fn with_mail_registration_service(mut self, service: Arc<MailRegistrationService>) -> Self {
self.mail_registration_service = Some(service);
self
}
pub fn with_mail_slot_service(mut self, service: Arc<MailSlotService>) -> Self {
self.mail_slot_service = Some(service);
self
}
pub fn with_question_service(mut self, service: Arc<QuestionService>) -> Self {
self.question_service = Some(service);
self
}
pub fn with_question_answer_service(mut self, service: Arc<QuestionAnswerService>) -> Self {
self.question_answer_service = Some(service);
self
}
pub fn with_registration_question_service(mut self, service: Arc<RegistrationQuestionService>) -> Self {
self.registration_question_service = Some(service);
self
}
pub fn with_registration_service(mut self, service: Arc<RegistrationService>) -> Self {
self.registration_service = Some(service);
self
}
pub fn with_registration_answer_service(mut self, service: Arc<RegistrationAnswerService>) -> Self {
self.registration_answer_service = Some(service);
self
}
pub fn with_slot_service(mut self, service: Arc<SlotService>) -> Self {
self.slot_service = Some(service);
self
}
pub fn with_stage_service(mut self, service: Arc<StageService>) -> Self {
self.stage_service = Some(service);
self
}
pub fn with_tag_category_service(mut self, service: Arc<TagCategoryService>) -> Self {
self.tag_category_service = Some(service);
self
}
pub fn with_tag_service(mut self, service: Arc<TagService>) -> Self {
self.tag_service = Some(service);
self
}
pub fn with_ticket_service(mut self, service: Arc<TicketService>) -> Self {
self.ticket_service = Some(service);
self
}
pub fn with_type_mail_service(mut self, service: Arc<TypeMailService>) -> Self {
self.type_mail_service = Some(service);
self
}
pub fn build(self) -> AppState {
AppState {
booth_category_service: self.booth_category_service.expect("booth_category_service is required"),
booth_service: self.booth_service.expect("booth_service is required"),
type_booth_service: self.type_booth_service.expect("type_booth_service is required"),
booth_booking_service: self.booth_booking_service.expect("booth_booking_service is required"),
event_service: self.event_service.expect("event_service is required"),
event_type_service: self.event_type_service.expect("event_type_service is required"),
lead_provenance_service: self.lead_provenance_service.expect("lead_provenance_service is required"),
lead_provenance_registration_service: self.lead_provenance_registration_service.expect("lead_provenance_registration_service is required"),
lead_request_service: self.lead_request_service.expect("lead_request_service is required"),
lead_rule_service: self.lead_rule_service.expect("lead_rule_service is required"),
lead_rule_predicate_service: self.lead_rule_predicate_service.expect("lead_rule_predicate_service is required"),
mail_service: self.mail_service.expect("mail_service is required"),
mail_registration_service: self.mail_registration_service.expect("mail_registration_service is required"),
mail_slot_service: self.mail_slot_service.expect("mail_slot_service is required"),
question_service: self.question_service.expect("question_service is required"),
question_answer_service: self.question_answer_service.expect("question_answer_service is required"),
registration_question_service: self.registration_question_service.expect("registration_question_service is required"),
registration_service: self.registration_service.expect("registration_service is required"),
registration_answer_service: self.registration_answer_service.expect("registration_answer_service is required"),
slot_service: self.slot_service.expect("slot_service is required"),
stage_service: self.stage_service.expect("stage_service is required"),
tag_category_service: self.tag_category_service.expect("tag_category_service is required"),
tag_service: self.tag_service.expect("tag_service is required"),
ticket_service: self.ticket_service.expect("ticket_service is required"),
type_mail_service: self.type_mail_service.expect("type_mail_service is required"),
}
}
}