use clap::Parser;
use eyre::Result;
mod commands;
mod output;
use commands::{buidl, compliance, developer, user};
use output::OutputFormat;
#[derive(Debug, Parser)]
#[command(name = "circle-cli", about = "Circle Web3 Services SDK CLI", version)]
pub struct Cli {
#[arg(long, env = "CIRCLE_API_KEY", global = true)]
pub api_key: Option<String>,
#[arg(long, env = "CIRCLE_BASE_URL", global = true, default_value = "https://api.circle.com")]
pub base_url: String,
#[arg(long, global = true, default_value = "json")]
pub output: OutputFormat,
#[command(subcommand)]
pub command: Command,
}
#[derive(Debug, clap::Subcommand)]
pub enum Command {
Buidl {
#[command(subcommand)]
cmd: buidl::BuidlCommand,
},
Compliance {
#[command(subcommand)]
cmd: compliance::ComplianceCommand,
},
Developer {
#[command(subcommand)]
cmd: developer::DeveloperCommand,
},
User {
#[command(subcommand)]
cmd: user::UserCommand,
},
}
#[tokio::main]
async fn main() -> Result<()> {
let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
tracing_subscriber::fmt::init();
let cli = Cli::parse();
let api_key = cli.api_key.unwrap_or_default();
let base_url = cli.base_url;
let output = cli.output;
match cli.command {
Command::Buidl { cmd } => buidl::run(cmd, &api_key, &base_url, output).await,
Command::Compliance { cmd } => compliance::run(cmd, &api_key, &base_url, output).await,
Command::Developer { cmd } => developer::run(cmd, &api_key, &base_url, output).await,
Command::User { cmd } => user::run(cmd, &api_key, &base_url, output).await,
}
}