mod command;
mod config;
mod help;
mod reply;
mod state;
mod utils;
use clap::Parser;
use rpassword::prompt_password;
use std::error::Error;
use command::*;
use config::*;
use state::*;
use utils::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let cli = Cli::parse();
if cli.gen_password_hash {
let password = if let Some(pwd) = cli.password {
pwd
} else {
prompt_password("Enter password:")?
};
println!("Password Hash: {}", argon2_hash_password(&password));
} else {
let config = MainConfig::new(cli)?;
initialize_logging(&config);
let (_, handle) = run_server(config).await?;
handle.await?;
}
Ok(())
}