use std::sync::Arc;
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;
#[derive(Clone)]
pub struct AppState {
pub access_log_service: Arc<AccessLogService>,
pub bucket_service: Arc<BucketService>,
pub content_hash_service: Arc<ContentHashService>,
pub conversion_job_service: Arc<ConversionJobService>,
pub file_comment_service: Arc<FileCommentService>,
pub file_lock_service: Arc<FileLockService>,
pub file_share_service: Arc<FileShareService>,
pub file_version_service: Arc<FileVersionService>,
pub processing_job_service: Arc<ProcessingJobService>,
pub stored_file_service: Arc<StoredFileService>,
pub thumbnail_service: Arc<ThumbnailService>,
pub upload_session_service: Arc<UploadSessionService>,
pub user_quota_service: Arc<UserQuotaService>,
}
impl AppState {
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,
}
}
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(),
}
}
}
#[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 {
pub fn new() -> Self {
Self::default()
}
pub fn with_access_log_service(mut self, service: Arc<AccessLogService>) -> Self {
self.access_log_service = Some(service);
self
}
pub fn with_bucket_service(mut self, service: Arc<BucketService>) -> Self {
self.bucket_service = Some(service);
self
}
pub fn with_content_hash_service(mut self, service: Arc<ContentHashService>) -> Self {
self.content_hash_service = Some(service);
self
}
pub fn with_conversion_job_service(mut self, service: Arc<ConversionJobService>) -> Self {
self.conversion_job_service = Some(service);
self
}
pub fn with_file_comment_service(mut self, service: Arc<FileCommentService>) -> Self {
self.file_comment_service = Some(service);
self
}
pub fn with_file_lock_service(mut self, service: Arc<FileLockService>) -> Self {
self.file_lock_service = Some(service);
self
}
pub fn with_file_share_service(mut self, service: Arc<FileShareService>) -> Self {
self.file_share_service = Some(service);
self
}
pub fn with_file_version_service(mut self, service: Arc<FileVersionService>) -> Self {
self.file_version_service = Some(service);
self
}
pub fn with_processing_job_service(mut self, service: Arc<ProcessingJobService>) -> Self {
self.processing_job_service = Some(service);
self
}
pub fn with_stored_file_service(mut self, service: Arc<StoredFileService>) -> Self {
self.stored_file_service = Some(service);
self
}
pub fn with_thumbnail_service(mut self, service: Arc<ThumbnailService>) -> Self {
self.thumbnail_service = Some(service);
self
}
pub fn with_upload_session_service(mut self, service: Arc<UploadSessionService>) -> Self {
self.upload_session_service = Some(service);
self
}
pub fn with_user_quota_service(mut self, service: Arc<UserQuotaService>) -> Self {
self.user_quota_service = Some(service);
self
}
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"),
}
}
}