1#![warn(missing_docs)]
2#![cfg_attr(docsrs, feature(doc_cfg))]
3#![doc(
4 html_logo_url = "https://raw.githubusercontent.com/surban/aggligator/master/.misc/aggligator.png",
5 html_favicon_url = "https://raw.githubusercontent.com/surban/aggligator/master/.misc/aggligator.png",
6 issue_tracker_base_url = "https://github.com/surban/aggligator/issues/"
7)]
8
9use anyhow::{bail, Context};
12use std::path::PathBuf;
13use tracing_subscriber::{fmt, prelude::*, EnvFilter};
14
15use aggligator::cfg::Cfg;
16use aggligator_transport_tcp::TcpLinkFilter;
17
18pub fn init_log() {
20 tracing_subscriber::registry().with(fmt::layer()).with(EnvFilter::from_default_env()).init();
21 tracing_log::LogTracer::init().unwrap();
22}
23
24pub fn print_default_cfg() {
26 println!("{}", serde_json::to_string_pretty(&Cfg::default()).unwrap());
27}
28
29pub fn load_cfg(path: &Option<PathBuf>) -> anyhow::Result<Cfg> {
32 match path {
33 Some(path) => {
34 let file = std::fs::File::open(path).context("cannot open configuration file")?;
35 serde_json::from_reader(file).context("cannot parse configuration file")
36 }
37 None => Ok(Cfg::default()),
38 }
39}
40
41pub fn parse_tcp_link_filter(s: &str) -> anyhow::Result<TcpLinkFilter> {
43 match s {
44 "none" => Ok(TcpLinkFilter::None),
45 "interface-interface" => Ok(TcpLinkFilter::InterfaceInterface),
46 "interface-ip" => Ok(TcpLinkFilter::InterfaceIp),
47 other => bail!("unknown TCP link filter: {other}"),
48 }
49}