pagbank-cli 0.2.0

CLI para as APIs do PagBank
use anyhow::Result;

use crate::cli::AccountsAction;
use crate::output;

pub async fn run(
    action: AccountsAction,
    env_override: Option<&str>,
    output_fmt: &crate::cli::OutputFormat,
) -> Result<()> {
    let client = crate::client::load_client(env_override)?;

    match action {
        AccountsAction::Create {
            reference_id,
            name,
            email,
            tax_id,
            r#type,
            tos_ip,
        } => {
            if let Err(msg) = crate::validators::validate_email(&email) {
                anyhow::bail!(msg);
            }
            if let Err(msg) = crate::validators::validate_tax_id(&tax_id) {
                anyhow::bail!(msg);
            }
            use chrono::Utc;
            let body = serde_json::json!({
                "reference_id": reference_id,
                "name": name,
                "email": email,
                "tax_id": tax_id,
                "type": r#type,
                "tos_acceptance": {
                    "ip": tos_ip,
                    "accepted_at": Utc::now().to_rfc3339(),
                },
            });
            let result = pagbank_sdk::endpoints::accounts::create(&client, &body).await?;
            let val = serde_json::to_value(result)?;
            match output_fmt {
                crate::cli::OutputFormat::Json => output::print_json(&val),
                crate::cli::OutputFormat::Table => output::print_object_table("Conta Criada", &val),
            }
            Ok(())
        }
        AccountsAction::Get { id } => {
            let result = pagbank_sdk::endpoints::accounts::get(&client, &id).await?;
            let val = serde_json::to_value(result)?;
            match output_fmt {
                crate::cli::OutputFormat::Json => output::print_json(&val),
                crate::cli::OutputFormat::Table => output::print_object_table("Conta", &val),
            }
            Ok(())
        }
    }
}