1#![feature(once_cell)]23pub mod command;4pub mod host;5pub mod keys;67pub mod cmds;8pub mod db;9pub mod nix;1011mod fleetdata;1213use anyhow::Result;14use clap::Clap;1516use cmds::{build_systems::BuildSystems, generate_secrets::GenerateSecrets, secrets::Secrets};17use host::{Config, FleetOpts};1819#[derive(Clap)]20#[clap(version = "1.0", author = "CertainLach <iam@lach.pw>")]21enum Opts {22 23 GenerateSecrets(GenerateSecrets),24 25 BuildSystems(BuildSystems),26 27 Secrets(Secrets),28}2930#[derive(Clap)]31struct RootOpts {32 #[clap(flatten)]33 fleet_opts: FleetOpts,34 #[clap(subcommand)]35 command: Opts,36}3738fn run_command(config: &Config, command: Opts) -> Result<()> {39 match command {40 Opts::BuildSystems(c) => c.run(config)?,41 Opts::GenerateSecrets(c) => c.run()?,42 Opts::Secrets(s) => s.run(config)?,43 };44 Ok(())45}4647fn main() -> Result<()> {48 env_logger::Builder::new()49 .filter_level(log::LevelFilter::Info)50 .init();51 let opts = RootOpts::parse();52 let config = opts.fleet_opts.build()?;5354 match run_command(&config, opts.command) {55 Ok(()) => {56 config.save()?;57 Ok(())58 }59 Err(e) => {60 let _ = config.save();61 Err(e)62 }63 }64}