use serde::Deserialize; #[derive(Clone, Debug, Deserialize)] #[serde(default)] pub struct GitConfig { pub repo_root: String, pub objects_root: String, pub max_blob_size: u64, pub sync: SyncSettings, } impl Default for GitConfig { fn default() -> Self { Self { repo_root: "/opt/gitdata/repos".to_string(), objects_root: "/opt/gitdata/objects".to_string(), max_blob_size: 100 * 1024 * 1024, sync: SyncSettings::default(), } } } #[derive(Clone, Debug, Deserialize)] #[serde(default)] pub struct SyncSettings { pub lock_ttl_secs: u64, pub max_commits_per_sync: usize, pub concurrency: usize, pub queue_topic: String, pub dlq_topic: String, pub max_lock_retries: u64, pub max_languages: usize, pub language_timeout_secs: u64, pub brpop_timeout_secs: u64, } impl Default for SyncSettings { fn default() -> Self { Self { lock_ttl_secs: 120, max_commits_per_sync: 5_000, concurrency: 4, queue_topic: "gitdata:{tasks}".to_string(), dlq_topic: "gitdata:{dlq}".to_string(), max_lock_retries: 5, max_languages: 20, language_timeout_secs: 30, brpop_timeout_secs: 5, } } }