abridged/src/main.rs

66 lines
1.4 KiB
Rust

use std::process::ExitCode;
use config::Node;
use log::debug;
use crate::config::Config;
use crate::supervisor::run_tasks;
mod supervisor;
mod linkmap;
mod config;
#[cfg(feature="irc")]
mod bridge_irc;
#[cfg(feature="matrix")]
mod bridge_matrix;
#[cfg(feature="discord")]
mod bridge_discord;
#[cfg(any(
not(any(feature="tls-rustls", feature="tls-native")),
all(feature="tls-rustls", feature="tls-native"),
))]
compile_error!(r#"exactly one of "tls-rustls" or "tls-native" must be enabled."#);
#[tokio::main]
async fn main() -> ExitCode {
env_logger::init();
debug!("reading arguments");
let mut args = std::env::args();
let cmd_name = args.next()
.unwrap_or_else(|| env!("CARGO_PKG_NAME").to_owned());
let Some(conf_filename) = args.next() else {
eprintln!("Usage: {cmd_name} <config>");
return ExitCode::FAILURE
};
debug!("reading config file");
let conf_str = match std::fs::read_to_string(&conf_filename) {
Ok(s) => s,
Err(e) => {
eprintln!("Failed to read {conf_filename}: {e}");
return ExitCode::FAILURE
}
};
debug!("parsing config");
let config: Config = match toml::from_str(&conf_str) {
Ok(c) => c,
Err(e) => {
eprintln!("{e}");
return ExitCode::SUCCESS
}
};
let tasks = config.nodes.into_iter()
.map(|(k, t)| (k, Node::into_task(t)))
.collect();
debug!("running tasks");
run_tasks(tasks).await;
ExitCode::SUCCESS
}