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(())
}