nysm 0.2.1

Manage secrets from Secrets Providers.
Documentation
#![cfg(not(tarpaulin_include))]
use clap::Parser;
use nysm::{
  cli::{ArgumentParser, Providers},
  client::QuerySecrets,
  provider::{aws::AwsClient, github::GitHubClient, doppler::DopplerClient},
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
  rustls::crypto::ring::default_provider()
    .install_default()
    .expect("Failed to install rustls crypto provider");

  let cli = ArgumentParser::parse();

  let (client, command): (Box<dyn QuerySecrets>, _) = match &cli.provider {
    Providers::Aws(aws) => {
      let client = Box::new(AwsClient::new(aws.region.clone()).await);
      (client, &aws.command)
    }
    Providers::Github(github) => {
      let token = github.token.clone()
        .ok_or("GitHub token is required. Set via --token or GITHUB_TOKEN env var")?;
      let client = Box::new(GitHubClient::new(token, github.owner.clone(), github.repo.clone())?);
      (client, &github.command)
    }
    Providers::Doppler(doppler) => {
      let token = doppler.token.clone()
        .ok_or("Doppler token is required. Set via --token or DOPPLER_TOKEN env var")?;
      let client = Box::new(DopplerClient::new(token, doppler.project.clone(), doppler.config.clone())?);
      (client, &doppler.command)
    }
  };

  ArgumentParser::run_subcommand(client, command).await;

  Ok(())
}