use crate::config::AppConfig; use crate::error::AppResult; impl AppConfig { pub fn s3_endpoint(&self) -> AppResult> { self.get_env::("APP_S3_ENDPOINT") } pub fn s3_region(&self) -> AppResult { self.get_env_or("APP_S3_REGION", "us-east-1".to_string()) } pub fn s3_access_key(&self) -> AppResult> { self.get_env::("APP_S3_ACCESS_KEY") } pub fn s3_secret_key(&self) -> AppResult> { self.get_env::("APP_S3_SECRET_KEY") } pub fn s3_bucket(&self) -> AppResult> { self.get_env::("APP_S3_BUCKET") } pub fn s3_path_style(&self) -> AppResult { self.get_env_or("APP_S3_PATH_STYLE", false) } pub fn s3_public_url(&self) -> AppResult> { self.get_env::("APP_S3_PUBLIC_URL") } pub fn s3_max_connections(&self) -> AppResult { self.get_env_or("APP_S3_MAX_CONNECTIONS", 50) } pub fn s3_idle_timeout(&self) -> AppResult { self.get_env_or("APP_S3_IDLE_TIMEOUT", 90) } pub fn s3_connection_timeout(&self) -> AppResult { self.get_env_or("APP_S3_CONNECTION_TIMEOUT", 10) } pub fn s3_max_retries(&self) -> AppResult { self.get_env_or("APP_S3_MAX_RETRIES", 3) } pub fn s3_upload_part_size(&self) -> AppResult { self.get_env_or("APP_S3_UPLOAD_PART_SIZE", 8 * 1024 * 1024) } pub fn s3_max_upload_size(&self) -> AppResult { self.get_env_or("APP_S3_MAX_UPLOAD_SIZE", 100 * 1024 * 1024) } pub fn s3_presigned_url_expiry(&self) -> AppResult { self.get_env_or("APP_S3_PRESIGNED_URL_EXPIRY", 3600) } pub fn s3_force_path_style(&self) -> AppResult { self.get_env_or("APP_S3_FORCE_PATH_STYLE", false) } }