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, info::Info, secrets::Secrets};15use host::{Config, FleetOpts};1617#[derive(StructOpt)]18enum Opts {19 20 BuildSystems(BuildSystems),21 22 Secrets(Secrets),23 24 Info(Info),25}2627#[derive(StructOpt)]28#[structopt(29 version = "1.0",30 author,31 global_setting(ColorAuto),32 global_setting(ColoredHelp)33)]34struct RootOpts {35 #[structopt(flatten)]36 fleet_opts: FleetOpts,37 #[structopt(subcommand)]38 command: Opts,39}4041fn run_command(config: &Config, command: Opts) -> Result<()> {42 match command {43 Opts::BuildSystems(c) => c.run(config)?,44 Opts::Secrets(s) => s.run(config)?,45 Opts::Info(i) => i.run(config)?,46 };47 Ok(())48}4950fn main() -> Result<()> {51 env_logger::Builder::new()52 .filter_level(log::LevelFilter::Info)53 .init();54 let opts = RootOpts::from_args();55 let config = opts.fleet_opts.build()?;5657 match run_command(&config, opts.command) {58 Ok(()) => {59 config.save()?;60 Ok(())61 }62 Err(e) => {63 let _ = config.save();64 Err(e)65 }66 }67}