1pub mod command;2pub mod host;3pub mod keys;45pub mod cmds;6pub mod nix;78mod fleetdata;910use anyhow::Result;11use structopt::clap::AppSettings::*;12use structopt::StructOpt;1314use cmds::{build_systems::BuildSystems, secrets::Secrets};15use host::{Config, FleetOpts};1617#[derive(StructOpt)]18enum Opts {19 20 BuildSystems(BuildSystems),21 22 Secrets(Secrets),23}2425#[derive(StructOpt)]26#[structopt(27 version = "1.0",28 author,29 global_setting(ColorAuto),30 global_setting(ColoredHelp)31)]32struct RootOpts {33 #[structopt(flatten)]34 fleet_opts: FleetOpts,35 #[structopt(subcommand)]36 command: Opts,37}3839fn run_command(config: &Config, command: Opts) -> Result<()> {40 match command {41 Opts::BuildSystems(c) => c.run(config)?,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::from_args();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}