1#[cfg(feature = "http")]
4pub mod auth_http;
5pub mod cli;
6pub mod config;
7pub mod error;
8#[cfg(feature = "http")]
9pub mod metrics;
10pub mod notifier;
11pub mod probe;
12pub mod rest_client;
13pub mod tools;
14pub mod transport;
15
16use crate::cli::Command;
17use crate::config::Config;
18use crate::error::Result;
19
20pub async fn run(cli: cli::Cli) -> Result<()> {
21 tracing_subscriber::fmt()
22 .with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
23 .with_writer(std::io::stderr)
24 .init();
25
26 let Command::Serve(args) = cli.command;
27 let config = Config::from_args(&args)?;
28
29 if config.http_addr.is_some() {
30 #[cfg(feature = "http")]
31 return transport::http::serve(config).await;
32 #[cfg(not(feature = "http"))]
33 return Err(error::Error::Config(
34 "HTTP mode requires building with --features http".into(),
35 ));
36 }
37
38 transport::stdio::serve(config).await
39}