secrets-sync 0.1.1

secret-sync, a rusty program
Documentation
use eyre::{Result, WrapErr};
use pretty_assertions::{assert_eq, assert_ne};
use tap::prelude::*;
use gazebo::prelude::*;
use itertools::Itertools;
use ::secrets_sync::{print_version, setup_failfast, LOGGING_GUARD};
use serde::Deserialize;
use getset_scoped::Getters;
use lazy_settings::settings;
use clap::{Parser, ValueEnum};
use crate::provider::doppler::DopplerProvider;
use crate::provider::flyio::FlyProvider;
use crate::provider::SecretProvider;

mod provider;

#[derive(Parser, Debug)]
struct Args {
    #[clap(short, long, value_parser)]
    from: Providers,
    #[clap(short, long, value_parser)]
    to: Providers,
}

#[derive(Copy, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
enum Providers {
    Doppler,
    Flyio,
}

fn main() -> Result<()> {
    if std::env::args_os().any(|arg| arg == "--version" || arg == "-V") {
        print_version();
        std::process::exit(0);
    }
    setup_failfast();
    once_cell::sync::Lazy::force(&LOGGING_GUARD);
    let args: Args = Args::parse();
    let from_provider: Box<dyn SecretProvider> = match args.from {
        Providers::Doppler => { Box::new(DopplerProvider::new("main")?) }
        Providers::Flyio => { Box::new(FlyProvider::new("main")?) }
    };

    let to_provider: Box<dyn SecretProvider> = match args.to {
        Providers::Doppler => { Box::new(DopplerProvider::new("main")?) }
        Providers::Flyio => { Box::new(FlyProvider::new("main")?) }
    };

    let all_secrets = from_provider.get_all()?;
    to_provider.set_all(&all_secrets)?;
    Ok(())
}