pagbank-cli 0.2.0

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

use crate::cli::CheckoutsAction;
use crate::output;

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

    match action {
        CheckoutsAction::Create {
            name,
            amount,
            description,
            redirect_url,
            payment_methods,
        } => {
            let mut body = serde_json::json!({
                "name": name,
                "amount": { "value": amount, "currency": "BRL" },
            });
            if let Some(d) = description {
                body["description"] = serde_json::json!(d);
            }
            if let Some(r) = redirect_url {
                body["redirect_url"] = serde_json::json!(r);
            }
            if let Some(pm) = payment_methods {
                let methods: Vec<String> = pm.split(',').map(|s| s.trim().to_string()).collect();
                body["payment_methods"] = serde_json::json!(methods);
            }
            let result = pagbank_sdk::endpoints::checkouts::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("Checkout Criado", &val)
                }
            }
            Ok(())
        }
        CheckoutsAction::Get { id } => {
            let result = pagbank_sdk::endpoints::checkouts::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("Checkout", &val),
            }
            Ok(())
        }
        CheckoutsAction::Activate { id } => {
            let result = pagbank_sdk::endpoints::checkouts::activate(&client, &id).await?;
            let val = serde_json::to_value(result)?;
            output::print_success("Checkout ativado");
            match output_fmt {
                crate::cli::OutputFormat::Json => output::print_json(&val),
                crate::cli::OutputFormat::Table => output::print_object_table("Checkout", &val),
            }
            Ok(())
        }
        CheckoutsAction::Deactivate { id } => {
            let result = pagbank_sdk::endpoints::checkouts::deactivate(&client, &id).await?;
            let val = serde_json::to_value(result)?;
            output::print_success("Checkout inativado");
            match output_fmt {
                crate::cli::OutputFormat::Json => output::print_json(&val),
                crate::cli::OutputFormat::Table => output::print_object_table("Checkout", &val),
            }
            Ok(())
        }
    }
}