mod config; mod server; mod state; mod sync; use std::path::PathBuf; use clap::Parser; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use crate::{config::QueueConfig, state::QueueState, sync::SyncService}; #[derive(Parser, Debug)] #[command(name = "queue-node")] struct Args { #[arg(short, long)] config: PathBuf, } #[tokio::main] async fn main() -> anyhow::Result<()> { tracing_subscriber::registry() .with( tracing_subscriber::EnvFilter::try_from_default_env() .unwrap_or_else(|_| "queue_node=info,tower_http=debug".into()), ) .with(tracing_subscriber::fmt::layer()) .init(); let args = Args::parse(); let config = QueueConfig::load(&args.config)?; let state = QueueState::new(config.node_id); SyncService::new(config.clone(), state.clone()).start(); server::start_server(config, state).await }