use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct S3Config { pub server: ServerConfig, pub storage: StorageConfig, pub auth: AuthConfig, pub cors: CorsConfig, pub logging: LoggingConfig, pub limits: LimitsConfig, pub multipart: MultipartConfig, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ServerConfig { pub port: u16, pub address: String, pub silent: bool, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct StorageConfig { pub directory: String, pub clean_slate: bool, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AuthConfig { pub enabled: bool, pub credentials: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Credential { #[serde(rename = "accessKeyId")] pub access_key_id: String, #[serde(rename = "secretAccessKey")] pub secret_access_key: String, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CorsConfig { pub enabled: bool, pub allowed_origins: Option>, pub allowed_methods: Option>, pub allowed_headers: Option>, pub exposed_headers: Option>, pub max_age: Option, pub allow_credentials: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct LoggingConfig { pub level: Option, pub format: Option, pub enabled: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct LimitsConfig { pub max_object_size: Option, pub max_metadata_size: Option, pub request_timeout: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct MultipartConfig { pub expiration_days: Option, pub cleanup_interval_minutes: Option, }