backbone-support 0.11.0

Customer support: issues tracked against service level agreements, and warranty claims
Documentation
//! Support Module Handlers
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! This module provides:
//! - AppState dependency injection container
//! - Custom handler integration points

use std::sync::Arc;

// Import all services
use crate::application::service::IssueService;
use crate::application::service::ServiceLevelAgreementService;
use crate::application::service::ServiceLevelPriorityService;
use crate::application::service::WarrantyClaimService;

/// Application state for dependency injection.
///
/// This struct holds references to all module services
/// and is passed to HTTP handlers via Axum's State extractor.
///
/// # Example
///
/// ```ignore
/// use axum::extract::State;
///
/// async fn custom_handler(
///     State(state): State<AppState>,
/// ) -> impl IntoResponse {
///     // Access services via state
/// }
/// ```
#[derive(Clone)]
pub struct AppState {
    /// Issue service
    pub issue_service: Arc<IssueService>,
    /// ServiceLevelAgreement service
    pub service_level_agreement_service: Arc<ServiceLevelAgreementService>,
    /// ServiceLevelPriority service
    pub service_level_priority_service: Arc<ServiceLevelPriorityService>,
    /// WarrantyClaim service
    pub warranty_claim_service: Arc<WarrantyClaimService>,
}

impl AppState {
    /// Create a new AppState with all services.
    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,
        }
    }

    /// Create AppState from module instance.
    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(),
        }
    }
}

/// Builder for AppState.
///
/// Allows incremental construction of AppState.
#[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 {
    /// Create a new builder.
    pub fn new() -> Self {
        Self::default()
    }

    /// Set the Issue service.
    pub fn with_issue_service(mut self, service: Arc<IssueService>) -> Self {
        self.issue_service = Some(service);
        self
    }

    /// Set the ServiceLevelAgreement service.
    pub fn with_service_level_agreement_service(mut self, service: Arc<ServiceLevelAgreementService>) -> Self {
        self.service_level_agreement_service = Some(service);
        self
    }

    /// Set the ServiceLevelPriority service.
    pub fn with_service_level_priority_service(mut self, service: Arc<ServiceLevelPriorityService>) -> Self {
        self.service_level_priority_service = Some(service);
        self
    }

    /// Set the WarrantyClaim service.
    pub fn with_warranty_claim_service(mut self, service: Arc<WarrantyClaimService>) -> Self {
        self.warranty_claim_service = Some(service);
        self
    }

    /// Build the AppState.
    ///
    /// # Panics
    ///
    /// Panics if any required service is not set.
    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"),
        }
    }
}