#[macro_use] extern crate rocket; // Copyright 2020 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 use clap::{App, ArgMatches}; mod commands; mod config; mod node; fn main() { dotenv::dotenv().ok(); setup_logging(); println!("{}", banner()); let arg_matches = App::new("Nym Mixnode") .version(env!("CARGO_PKG_VERSION")) .author("Nymtech") .about("Implementation of a Loopix-based Mixnode") .subcommand(commands::describe::command_args()) .subcommand(commands::init::command_args()) .subcommand(commands::run::command_args()) .subcommand(commands::upgrade::command_args()) .subcommand(commands::sign::command_args()) .get_matches(); execute(arg_matches); } fn execute(matches: ArgMatches) { match matches.subcommand() { ("describe", Some(m)) => commands::describe::execute(m), ("init", Some(m)) => commands::init::execute(m), ("run", Some(m)) => commands::run::execute(m), ("sign", Some(m)) => commands::sign::execute(m), ("upgrade", Some(m)) => commands::upgrade::execute(m), _ => println!("{}", usage()), } } fn usage() -> &'static str { "usage: --help to see available options.\n\n" } fn banner() -> String { format!( r#" _ __ _ _ _ __ ___ | '_ \| | | | '_ \ _ \ | | | | |_| | | | | | | |_| |_|\__, |_| |_| |_| |___/ (mixnode - version {:}) "#, env!("CARGO_PKG_VERSION") ) } fn setup_logging() { let mut log_builder = pretty_env_logger::formatted_timed_builder(); if let Ok(s) = ::std::env::var("RUST_LOG") { log_builder.parse_filters(&s); } else { // default to 'Info' log_builder.filter(None, log::LevelFilter::Info); } log_builder .filter_module("hyper", log::LevelFilter::Warn) .filter_module("tokio_reactor", log::LevelFilter::Warn) .filter_module("reqwest", log::LevelFilter::Warn) .filter_module("mio", log::LevelFilter::Warn) .filter_module("want", log::LevelFilter::Warn) .init(); }