use tokio::sync::mpsc::Sender;
pub mod app_state;
pub mod constant;
use super::args::EnvArgs;
use super::config::Config;
use super::error::AppResult;
use super::logger::init_logger;
use super::server::Server;
use app_state::AppState;
pub struct App {
pub server: Server,
}
impl App {
pub async fn new(
env_args: &EnvArgs,
spawn_tx: Option<Sender<String>>,
includes_ansi_codes: bool,
) -> AppResult<Self> {
let _ = init_logger(spawn_tx, includes_ansi_codes);
let mut config = Config::new(
env_args.config_file_path.as_ref(),
env_args.fallback_respond_dir_path.as_ref(),
)?;
if let Some(port) = env_args.port {
let mut listener = config.listener.unwrap_or_default();
listener.port = port;
config.listener = Some(listener);
}
let app_state = AppState { config };
let server = Server::new(app_state).await?;
Ok(Self { server })
}
}