lumina_cli/
common.rs

1use std::env::current_exe;
2
3use anyhow::Result;
4use clap::Parser;
5
6use crate::native;
7#[cfg(feature = "browser-node")]
8use crate::server;
9
10#[derive(Debug, Parser)]
11pub(crate) enum CliArgs {
12    /// Run native node locally
13    Node(native::Params),
14    /// Serve compiled wasm node to be run in the browser
15    #[cfg(feature = "browser-node")]
16    Browser(server::Params),
17}
18
19/// Run the Lumina node.
20pub async fn run() -> Result<()> {
21    let _ = dotenvy::dotenv();
22
23    let args = if current_exe()?
24        .file_name()
25        .unwrap_or_default()
26        .to_string_lossy()
27        == "lumina-node"
28    {
29        CliArgs::Node(native::Params::parse())
30    } else {
31        CliArgs::parse()
32    };
33
34    let _guard = init_tracing();
35
36    match args {
37        CliArgs::Node(args) => native::run(args).await,
38        #[cfg(feature = "browser-node")]
39        CliArgs::Browser(args) => server::run(args).await,
40    }
41}
42
43fn init_tracing() -> tracing_appender::non_blocking::WorkerGuard {
44    let (non_blocking, guard) = tracing_appender::non_blocking(std::io::stdout());
45
46    let filter = tracing_subscriber::EnvFilter::builder()
47        .with_default_directive(tracing_subscriber::filter::LevelFilter::INFO.into())
48        .from_env_lossy();
49
50    tracing_subscriber::fmt()
51        .with_env_filter(filter)
52        .with_writer(non_blocking)
53        .init();
54
55    guard
56}