use std::net;
use std::path::PathBuf;
use argh::FromArgs;
use nakamoto_client::Network;
use nakamoto_node::{logger, Domain};
#[derive(FromArgs)]
pub struct Options {
#[argh(option)]
pub connect: Vec<net::SocketAddr>,
#[argh(option)]
pub listen: Vec<net::SocketAddr>,
#[argh(switch)]
pub testnet: bool,
#[argh(switch, short = '4')]
pub ipv4: bool,
#[argh(switch, short = '6')]
pub ipv6: bool,
#[argh(option, default = "log::Level::Info")]
pub log: log::Level,
#[argh(option)]
pub root: Option<PathBuf>,
}
impl Options {
pub fn from_env() -> Self {
argh::from_env()
}
}
fn main() {
let opts = Options::from_env();
logger::init(opts.log).expect("initializing logger for the first time");
let network = if opts.testnet {
Network::Testnet
} else {
Network::Mainnet
};
let domains = if opts.ipv4 && opts.ipv6 {
vec![Domain::IPV4, Domain::IPV6]
} else if opts.ipv4 {
vec![Domain::IPV4]
} else if opts.ipv6 {
vec![Domain::IPV6]
} else {
vec![Domain::IPV4, Domain::IPV6]
};
if let Err(e) = nakamoto_node::run(&opts.connect, &opts.listen, opts.root, &domains, network) {
log::error!(target: "node", "Exiting: {}", e);
std::process::exit(1);
}
}