use merge::Merge; use serde::Deserialize; use std::net::IpAddr; #[derive(Debug, Deserialize, Clone, Merge)] pub struct Settings { pub(crate) database: Option, pub(crate) rate_limit: Option, pub(crate) federation: Option, pub(crate) hostname: Option, pub(crate) bind: Option, pub(crate) port: Option, pub(crate) tls_enabled: Option, pub(crate) jwt_secret: Option, pub(crate) pictrs_url: Option, pub(crate) iframely_url: Option, pub(crate) captcha: Option, pub(crate) email: Option, pub(crate) setup: Option, } #[derive(Debug, Deserialize, Clone)] pub struct CaptchaConfig { pub enabled: bool, pub difficulty: String, } #[derive(Debug, Deserialize, Clone)] pub struct DatabaseConfig { pub user: String, pub password: String, pub host: String, pub port: i32, pub database: String, pub pool_size: u32, } #[derive(Debug, Deserialize, Clone)] pub struct EmailConfig { pub smtp_server: String, pub smtp_login: Option, pub smtp_password: Option, pub smtp_from_address: String, pub use_tls: bool, } #[derive(Debug, Deserialize, Clone)] pub struct FederationConfig { pub enabled: bool, pub allowed_instances: Option>, pub blocked_instances: Option>, } #[derive(Debug, Deserialize, Clone)] pub struct RateLimitConfig { pub message: i32, pub message_per_second: i32, pub post: i32, pub post_per_second: i32, pub register: i32, pub register_per_second: i32, pub image: i32, pub image_per_second: i32, } #[derive(Debug, Deserialize, Clone)] pub struct SetupConfig { pub admin_username: String, pub admin_password: String, pub admin_email: Option, pub site_name: String, }