#[cfg(feature = "cli")]
use crate::client::ClientOptions;
#[cfg(feature = "cli")]
#[derive(Debug, Clone)]
pub struct AppConfig {
pub command: CommandConfig,
pub output: crate::config::OutputConfig,
pub logging: crate::config::LoggingConfig,
pub client: ClientOptions,
}
#[cfg(feature = "cli")]
#[derive(Debug, Clone)]
pub enum CommandConfig {
Run(RunConfig),
#[cfg(feature = "server")]
Serve(ServeConfig),
}
#[cfg(feature = "cli")]
#[derive(Debug, Clone, Default)]
pub struct RunConfig {
pub quiet: bool,
pub task: crate::config::RunTask,
}
#[cfg(feature = "server")]
#[doc(alias = "server")]
#[derive(Debug, Clone)]
pub struct ServeConfig {
pub host: String,
pub port: u16,
pub runtime_overrides: ServeRuntimeOverrides,
}
#[cfg(feature = "server")]
#[derive(Debug, Clone, Default)]
pub struct ServeRuntimeOverrides {
pub proxy_timeout_ms: Option<u64>,
pub proxy_max_hops: Option<u32>,
pub douyin_mode: Option<String>,
pub douyin_upstream: Option<String>,
pub bilibili_mode: Option<String>,
pub bilibili_upstream: Option<String>,
pub kuaishou_mode: Option<String>,
pub kuaishou_upstream: Option<String>,
pub xiaohongshu_mode: Option<String>,
pub xiaohongshu_upstream: Option<String>,
pub twitter_mode: Option<String>,
pub twitter_upstream: Option<String>,
}
#[cfg(feature = "server")]
impl ServeConfig {
#[doc(alias = "bind")]
#[doc(alias = "socket_addr")]
pub fn bind_addr(&self) -> String {
format!("{}:{}", self.host, self.port)
}
#[doc(alias = "root_url")]
pub fn base_url(&self) -> String {
format!("http://{}", self.bind_addr())
}
pub fn runtime_override(&self, name: &str) -> Option<String> {
self.runtime_overrides.lookup(name)
}
}
#[cfg(feature = "server")]
impl ServeRuntimeOverrides {
pub fn lookup(&self, name: &str) -> Option<String> {
match name {
"AMAGI_PROXY_TIMEOUT_MS" => self.proxy_timeout_ms.map(|value| value.to_string()),
"AMAGI_PROXY_MAX_HOPS" => self.proxy_max_hops.map(|value| value.to_string()),
"AMAGI_PLATFORM_DOUYIN_MODE" => self.douyin_mode.clone(),
"AMAGI_PLATFORM_DOUYIN_UPSTREAM" => self.douyin_upstream.clone(),
"AMAGI_PLATFORM_BILIBILI_MODE" => self.bilibili_mode.clone(),
"AMAGI_PLATFORM_BILIBILI_UPSTREAM" => self.bilibili_upstream.clone(),
"AMAGI_PLATFORM_KUAISHOU_MODE" => self.kuaishou_mode.clone(),
"AMAGI_PLATFORM_KUAISHOU_UPSTREAM" => self.kuaishou_upstream.clone(),
"AMAGI_PLATFORM_XIAOHONGSHU_MODE" => self.xiaohongshu_mode.clone(),
"AMAGI_PLATFORM_XIAOHONGSHU_UPSTREAM" => self.xiaohongshu_upstream.clone(),
"AMAGI_PLATFORM_TWITTER_MODE" => self.twitter_mode.clone(),
"AMAGI_PLATFORM_TWITTER_UPSTREAM" => self.twitter_upstream.clone(),
_ => None,
}
}
}