apibrasil 1.0.0

SDK oficial Rust da plataforma APIBrasil: WhatsApp, SMS, consultas de CPF/CNPJ, veiculos, CEP, correios, pagamentos PIX/boleto e mais.
Documentation
//! Catálogo gerado a partir das documentações do gateway.

use apibrasil::generated;

#[test]
fn catalogo_esta_populado() {
    assert!(
        !generated::WHATSAPP_ACTIONS.is_empty(),
        "WHATSAPP_ACTIONS vazio — rode `cargo run --features blocking --bin codegen`"
    );
    assert!(!generated::EVOLUTION_PATHS.is_empty());
    assert!(!generated::WHATSMEOW_ACTIONS.is_empty());
    assert!(!generated::CONSULTA_SERVICOS.is_empty());
    assert!(!generated::CONSULTA_TIPOS.is_empty());
    assert!(!generated::SERVICE_ACTIONS.is_empty());
}

#[test]
fn actions_conhecidas_estao_no_catalogo() {
    assert!(generated::has_action("whatsapp", "sendText"));
    assert!(generated::has_action("dados", "lista-socios"));
    assert!(!generated::has_action("whatsapp", "actionQueNaoExiste"));
    assert!(!generated::has_action("servicoQueNaoExiste", "sendText"));

    let cep = generated::service_actions_for("cep");
    assert!(cep.contains(&"cidades"));
    assert!(generated::service_actions_for("servicoQueNaoExiste").is_empty());
}

#[test]
fn metadados_de_tipo_de_consulta() {
    let meta = generated::consulta_tipo("acerta-essencial").expect("tipo conhecido");
    assert_eq!(meta.service, "cpf");
    assert!(meta.fields.contains(&"cpf"));

    assert!(generated::consulta_tipo("tipo-que-nao-existe").is_none());
}

#[test]
fn listas_geradas_estao_ordenadas_para_a_busca_binaria() {
    let tipos: Vec<&str> = generated::CONSULTA_TIPOS.iter().map(|(t, _)| *t).collect();
    let mut ordenados = tipos.clone();
    ordenados.sort_unstable();
    assert_eq!(tipos, ordenados, "CONSULTA_TIPOS precisa estar ordenado");

    let servicos: Vec<&str> = generated::services().collect();
    let mut ordenados = servicos.clone();
    ordenados.sort_unstable();
    assert_eq!(
        servicos, ordenados,
        "SERVICE_ACTIONS precisa estar ordenado"
    );
}

#[test]
fn todos_os_servicos_do_cliente_estao_no_catalogo() {
    // Serviços com método dedicado na SDK que precisam existir no gateway.
    for service in [
        "whatsapp", "sms", "dados", "vehicles", "fipe", "correios", "cep", "consulta",
    ] {
        assert!(
            !generated::service_actions_for(service).is_empty(),
            "o serviço {service} deveria estar no catálogo"
        );
    }
}