1#![feature(once_cell)]23pub mod command;4pub mod host;5pub mod keys;67pub mod cmds;8pub mod nix;910mod fleetdata;1112use anyhow::Result;13use clap::Clap;1415use cmds::{build_systems::BuildSystems, secrets::Secrets};16use host::{Config, FleetOpts};1718#[derive(Clap)]19#[clap(version = "1.0", author = "CertainLach <iam@lach.pw>")]20enum Opts {21 22 BuildSystems(BuildSystems),23 24 Secrets(Secrets),25}2627#[derive(Clap)]28struct RootOpts {29 #[clap(flatten)]30 fleet_opts: FleetOpts,31 #[clap(subcommand)]32 command: Opts,33}3435fn run_command(config: &Config, command: Opts) -> Result<()> {36 match command {37 Opts::BuildSystems(c) => c.run(config)?,38 Opts::Secrets(s) => s.run(config)?,39 };40 Ok(())41}4243fn main() -> Result<()> {44 env_logger::Builder::new()45 .filter_level(log::LevelFilter::Info)46 .init();47 let opts = RootOpts::parse();48 let config = opts.fleet_opts.build()?;4950 match run_command(&config, opts.command) {51 Ok(()) => {52 config.save()?;53 Ok(())54 }55 Err(e) => {56 let _ = config.save();57 Err(e)58 }59 }60}