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 Node(native::Params),
14 #[cfg(feature = "browser-node")]
16 Browser(server::Params),
17}
18
19pub 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}