1pub mod command;2pub mod host;3pub mod keys;45pub mod cmds;6pub mod nix;78mod fleetdata;910use anyhow::Result;11use clap::Clap;1213use cmds::{build_systems::BuildSystems, secrets::Secrets};14use host::{Config, FleetOpts};1516#[derive(Clap)]17#[clap(version = "1.0", author = "CertainLach <iam@lach.pw>")]18enum Opts {19 20 BuildSystems(BuildSystems),21 22 Secrets(Secrets),23}2425#[derive(Clap)]26struct RootOpts {27 #[clap(flatten)]28 fleet_opts: FleetOpts,29 #[clap(subcommand)]30 command: Opts,31}3233fn run_command(config: &Config, command: Opts) -> Result<()> {34 match command {35 Opts::BuildSystems(c) => c.run(config)?,36 Opts::Secrets(s) => s.run(config)?,37 };38 Ok(())39}4041fn main() -> Result<()> {42 env_logger::Builder::new()43 .filter_level(log::LevelFilter::Info)44 .init();45 let opts = RootOpts::parse();46 let config = opts.fleet_opts.build()?;4748 match run_command(&config, opts.command) {49 Ok(()) => {50 config.save()?;51 Ok(())52 }53 Err(e) => {54 let _ = config.save();55 Err(e)56 }57 }58}