backbone-bucket 0.3.0

Bucket Bounded Context: File Storage Module for Backbone Framework
Documentation
//! Bucket 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::AccessLogService;
use crate::application::service::BucketService;
use crate::application::service::ContentHashService;
use crate::application::service::ConversionJobService;
use crate::application::service::FileCommentService;
use crate::application::service::FileLockService;
use crate::application::service::FileShareService;
use crate::application::service::FileVersionService;
use crate::application::service::ProcessingJobService;
use crate::application::service::StoredFileService;
use crate::application::service::ThumbnailService;
use crate::application::service::UploadSessionService;
use crate::application::service::UserQuotaService;

/// 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 {
    /// AccessLog service
    pub access_log_service: Arc<AccessLogService>,
    /// Bucket service
    pub bucket_service: Arc<BucketService>,
    /// ContentHash service
    pub content_hash_service: Arc<ContentHashService>,
    /// ConversionJob service
    pub conversion_job_service: Arc<ConversionJobService>,
    /// FileComment service
    pub file_comment_service: Arc<FileCommentService>,
    /// FileLock service
    pub file_lock_service: Arc<FileLockService>,
    /// FileShare service
    pub file_share_service: Arc<FileShareService>,
    /// FileVersion service
    pub file_version_service: Arc<FileVersionService>,
    /// ProcessingJob service
    pub processing_job_service: Arc<ProcessingJobService>,
    /// StoredFile service
    pub stored_file_service: Arc<StoredFileService>,
    /// Thumbnail service
    pub thumbnail_service: Arc<ThumbnailService>,
    /// UploadSession service
    pub upload_session_service: Arc<UploadSessionService>,
    /// UserQuota service
    pub user_quota_service: Arc<UserQuotaService>,
}

impl AppState {
    /// Create a new AppState with all services.
    pub fn new(
        access_log_service: Arc<AccessLogService>,
        bucket_service: Arc<BucketService>,
        content_hash_service: Arc<ContentHashService>,
        conversion_job_service: Arc<ConversionJobService>,
        file_comment_service: Arc<FileCommentService>,
        file_lock_service: Arc<FileLockService>,
        file_share_service: Arc<FileShareService>,
        file_version_service: Arc<FileVersionService>,
        processing_job_service: Arc<ProcessingJobService>,
        stored_file_service: Arc<StoredFileService>,
        thumbnail_service: Arc<ThumbnailService>,
        upload_session_service: Arc<UploadSessionService>,
        user_quota_service: Arc<UserQuotaService>
    ) -> Self {
        Self {
            access_log_service,
            bucket_service,
            content_hash_service,
            conversion_job_service,
            file_comment_service,
            file_lock_service,
            file_share_service,
            file_version_service,
            processing_job_service,
            stored_file_service,
            thumbnail_service,
            upload_session_service,
            user_quota_service,
        }
    }

    /// Create AppState from module instance.
    pub fn from_module(module: &crate::BucketModule) -> Self {
        Self {
            access_log_service: module.access_log_service.clone(),
            bucket_service: module.bucket_service.clone(),
            content_hash_service: module.content_hash_service.clone(),
            conversion_job_service: module.conversion_job_service.clone(),
            file_comment_service: module.file_comment_service.clone(),
            file_lock_service: module.file_lock_service.clone(),
            file_share_service: module.file_share_service.clone(),
            file_version_service: module.file_version_service.clone(),
            processing_job_service: module.processing_job_service.clone(),
            stored_file_service: module.stored_file_service.clone(),
            thumbnail_service: module.thumbnail_service.clone(),
            upload_session_service: module.upload_session_service.clone(),
            user_quota_service: module.user_quota_service.clone(),
        }
    }
}

/// Builder for AppState.
///
/// Allows incremental construction of AppState.
#[derive(Default)]
pub struct AppStateBuilder {
    access_log_service: Option<Arc<AccessLogService>>,
    bucket_service: Option<Arc<BucketService>>,
    content_hash_service: Option<Arc<ContentHashService>>,
    conversion_job_service: Option<Arc<ConversionJobService>>,
    file_comment_service: Option<Arc<FileCommentService>>,
    file_lock_service: Option<Arc<FileLockService>>,
    file_share_service: Option<Arc<FileShareService>>,
    file_version_service: Option<Arc<FileVersionService>>,
    processing_job_service: Option<Arc<ProcessingJobService>>,
    stored_file_service: Option<Arc<StoredFileService>>,
    thumbnail_service: Option<Arc<ThumbnailService>>,
    upload_session_service: Option<Arc<UploadSessionService>>,
    user_quota_service: Option<Arc<UserQuotaService>>,
}

impl AppStateBuilder {
    /// Create a new builder.
    pub fn new() -> Self {
        Self::default()
    }

    /// Set the AccessLog service.
    pub fn with_access_log_service(mut self, service: Arc<AccessLogService>) -> Self {
        self.access_log_service = Some(service);
        self
    }

    /// Set the Bucket service.
    pub fn with_bucket_service(mut self, service: Arc<BucketService>) -> Self {
        self.bucket_service = Some(service);
        self
    }

    /// Set the ContentHash service.
    pub fn with_content_hash_service(mut self, service: Arc<ContentHashService>) -> Self {
        self.content_hash_service = Some(service);
        self
    }

    /// Set the ConversionJob service.
    pub fn with_conversion_job_service(mut self, service: Arc<ConversionJobService>) -> Self {
        self.conversion_job_service = Some(service);
        self
    }

    /// Set the FileComment service.
    pub fn with_file_comment_service(mut self, service: Arc<FileCommentService>) -> Self {
        self.file_comment_service = Some(service);
        self
    }

    /// Set the FileLock service.
    pub fn with_file_lock_service(mut self, service: Arc<FileLockService>) -> Self {
        self.file_lock_service = Some(service);
        self
    }

    /// Set the FileShare service.
    pub fn with_file_share_service(mut self, service: Arc<FileShareService>) -> Self {
        self.file_share_service = Some(service);
        self
    }

    /// Set the FileVersion service.
    pub fn with_file_version_service(mut self, service: Arc<FileVersionService>) -> Self {
        self.file_version_service = Some(service);
        self
    }

    /// Set the ProcessingJob service.
    pub fn with_processing_job_service(mut self, service: Arc<ProcessingJobService>) -> Self {
        self.processing_job_service = Some(service);
        self
    }

    /// Set the StoredFile service.
    pub fn with_stored_file_service(mut self, service: Arc<StoredFileService>) -> Self {
        self.stored_file_service = Some(service);
        self
    }

    /// Set the Thumbnail service.
    pub fn with_thumbnail_service(mut self, service: Arc<ThumbnailService>) -> Self {
        self.thumbnail_service = Some(service);
        self
    }

    /// Set the UploadSession service.
    pub fn with_upload_session_service(mut self, service: Arc<UploadSessionService>) -> Self {
        self.upload_session_service = Some(service);
        self
    }

    /// Set the UserQuota service.
    pub fn with_user_quota_service(mut self, service: Arc<UserQuotaService>) -> Self {
        self.user_quota_service = Some(service);
        self
    }

    /// Build the AppState.
    ///
    /// # Panics
    ///
    /// Panics if any required service is not set.
    pub fn build(self) -> AppState {
        AppState {
            access_log_service: self.access_log_service.expect("access_log_service is required"),
            bucket_service: self.bucket_service.expect("bucket_service is required"),
            content_hash_service: self.content_hash_service.expect("content_hash_service is required"),
            conversion_job_service: self.conversion_job_service.expect("conversion_job_service is required"),
            file_comment_service: self.file_comment_service.expect("file_comment_service is required"),
            file_lock_service: self.file_lock_service.expect("file_lock_service is required"),
            file_share_service: self.file_share_service.expect("file_share_service is required"),
            file_version_service: self.file_version_service.expect("file_version_service is required"),
            processing_job_service: self.processing_job_service.expect("processing_job_service is required"),
            stored_file_service: self.stored_file_service.expect("stored_file_service is required"),
            thumbnail_service: self.thumbnail_service.expect("thumbnail_service is required"),
            upload_session_service: self.upload_session_service.expect("upload_session_service is required"),
            user_quota_service: self.user_quota_service.expect("user_quota_service is required"),
        }
    }
}