use std::{env, net::SocketAddr}; // 集中管理 api-server 的启动配置,避免入口层直接散落环境变量解析逻辑。 #[derive(Clone, Debug)] pub struct AppConfig { pub bind_host: String, pub bind_port: u16, pub log_filter: String, } impl Default for AppConfig { fn default() -> Self { Self { bind_host: "127.0.0.1".to_string(), bind_port: 3000, log_filter: "info,tower_http=info".to_string(), } } } impl AppConfig { pub fn from_env() -> Self { let mut config = Self::default(); if let Ok(bind_host) = env::var("GENARRATIVE_API_HOST") { if !bind_host.trim().is_empty() { config.bind_host = bind_host; } } if let Ok(bind_port) = env::var("GENARRATIVE_API_PORT") { if let Ok(parsed_port) = bind_port.parse::() { config.bind_port = parsed_port; } } if let Ok(log_filter) = env::var("GENARRATIVE_API_LOG") { if !log_filter.trim().is_empty() { config.log_filter = log_filter; } } config } pub fn bind_socket_addr(&self) -> SocketAddr { let address = format!("{}:{}", self.bind_host, self.bind_port); address .parse() .unwrap_or_else(|_| SocketAddr::from(([127, 0, 0, 1], 3000))) } }