diff --git a/src/main.rs b/src/main.rs index ed1c0e1..6e8480e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,7 @@ use opendal::{IntoOperatorUri, Operator, OperatorUri}; use secrecy::{ExposeSecret, SecretString}; use snafu::Snafu; use std::{fmt::Debug, str::FromStr}; -use tracing_subscriber::fmt::format::FmtSpan; +use tracing_subscriber::{EnvFilter, fmt::format::FmtSpan}; use twilight_gateway::{Event, EventTypeFlags, Intents, Shard, ShardId, StreamExt}; use twilight_model::id::{Id, marker::UserMarker}; @@ -44,7 +44,7 @@ impl Debug for OpendalOperator { } #[derive(Debug, Parser)] -struct Args { +struct AppArgs { #[arg(long, env)] discord_token: SecretString, @@ -55,26 +55,47 @@ struct Args { bot_owner: Id, } +#[derive(Parser)] +struct LoggingArgs { + #[arg(long = "logging-directives", env = "RUST_LOG", default_value = "info")] + env_filter: EnvFilter, +} + +#[derive(Parser)] +struct Args { + #[clap(flatten)] + app_args: AppArgs, + + #[clap(flatten)] + logging_args: LoggingArgs, +} + #[derive(Debug, Snafu)] enum MainError {} #[snafu::report] #[tokio::main] async fn main() -> Result<(), MainError> { + let Args { + logging_args, + app_args, + } = Parser::parse(); + + let LoggingArgs { env_filter } = logging_args; + tracing_subscriber::fmt() .pretty() + .with_env_filter(env_filter) .with_span_events(FmtSpan::NEW | FmtSpan::CLOSE) .init(); - let args = Parser::parse(); + tracing::debug!(?app_args, "using"); - tracing::debug!(?args, "using"); - - let Args { + let AppArgs { discord_token, storage, bot_owner, - } = args; + } = app_args; rustls::crypto::aws_lc_rs::default_provider() .install_default()