lazymc/src/main.rs
2023-01-11 12:44:00 +01:00

87 lines
1.9 KiB
Rust

#[macro_use]
extern crate anyhow;
#[macro_use]
extern crate clap;
#[macro_use]
extern crate derive_builder;
#[macro_use]
extern crate log;
pub(crate) mod action;
pub(crate) mod cli;
pub(crate) mod config;
pub(crate) mod forge;
pub(crate) mod join;
#[cfg(feature = "lobby")]
pub(crate) mod lobby;
pub(crate) mod mc;
pub(crate) mod monitor;
pub(crate) mod net;
pub(crate) mod os;
pub(crate) mod probe;
pub(crate) mod proto;
pub(crate) mod proxy;
pub(crate) mod server;
pub(crate) mod service;
pub(crate) mod status;
pub(crate) mod types;
pub(crate) mod util;
use std::env;
use clap::Command;
// Compile time feature compatability check.
#[cfg(all(windows, not(feature = "rcon")))]
compile_error!("Must enable \"rcon\" feature on Windows.");
/// Default log level if none is set.
const LOG_DEFAULT: &str = "info";
/// Main entrypoint.
fn main() -> Result<(), ()> {
// Initialize logger
init_log();
// Build clap app, invoke intended action
let app = cli::app();
invoke_action(app)
}
/// Initialize logger.
fn init_log() {
// Load .env variables
let _ = dotenv::dotenv();
// Set default log level if none is set
if env::var("RUST_LOG").is_err() {
env::set_var("RUST_LOG", LOG_DEFAULT);
}
// Initialize logger
pretty_env_logger::init();
}
/// Invoke an action.
fn invoke_action(app: Command) -> Result<(), ()> {
let matches = app.get_matches();
// Config operations
if let Some(matches) = matches.subcommand_matches("config") {
if let Some(matches) = matches.subcommand_matches("generate") {
action::config_generate::invoke(matches);
return Ok(());
}
if let Some(matches) = matches.subcommand_matches("test") {
action::config_test::invoke(matches);
return Ok(());
}
unreachable!();
}
// Start server
action::start::invoke(&matches)
}