use std::{ error::Error, sync::Arc, }; use tracing::{info}; use tracing_subscriber::{ fmt, fmt::format::FmtSpan, EnvFilter, }; use ptth::relay; use ptth::relay::RelayState; #[tokio::main] async fn main () -> Result <(), Box > { fmt () .with_env_filter (EnvFilter::from_default_env ()) .with_span_events (FmtSpan::FULL) .init () ; let config_file = ptth::load_toml::load_public ("config/ptth_relay.toml"); info! ("ptth_relay Git version: {:?}", ptth::git_version::GIT_VERSION); let (shutdown_rx, forced_shutdown) = ptth::graceful_shutdown::init_with_force (); forced_shutdown.wrap_server ( relay::run_relay ( Arc::new (RelayState::from (&config_file)), shutdown_rx ) ).await??; Ok (()) }