konduto/lib.rs
1//! # Konduto SDK para Rust
2//!
3//! SDK não oficial em Rust para a API da Konduto - Plataforma de análise de fraude.
4//!
5//! ## Características
6//!
7//! - Cliente HTTP assíncrono com suporte completo à API da Konduto
8//! - Tipos fortemente tipados para todas as estruturas de dados
9//! - Suporte a todos os endpoints principais (pedidos, blocklist, allowlist, reviewlist)
10//! - Tratamento de erros robusto com `thiserror`
11//! - Autenticação integrada (Basic Auth)
12//! - Métricas automáticas via StatsD (feature opcional)
13//! - Validação de dados em tempo de compilação usando `nutype`
14//!
15//! ## Instalação
16//!
17//! Adicione ao seu `Cargo.toml`:
18//!
19//! ```toml
20//! [dependencies]
21//! konduto-rs = "0.1"
22//! tokio = { version = "1", features = ["full"] }
23//! ```
24//!
25//! ## Exemplo Rápido
26//!
27//! ```no_run
28//! use konduto::{KondutoClient, Customer, Order, OrderId, TotalAmount};
29//!
30//! #[tokio::main]
31//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
32//! // Criar cliente (lê KONDUTO_API_KEY do ambiente)
33//! let client = KondutoClient::new()?;
34//!
35//! // Construir dados do cliente
36//! let customer = Customer::builder()
37//! .id("CUST123")?
38//! .name("João Silva")?
39//! .email("joao@example.com")?
40//! .build()?;
41//!
42//! // Criar pedido para análise
43//! let order = Order::builder()
44//! .id(OrderId::try_new("ORDER123")?)
45//! .total_amount(TotalAmount::new(100.0)?)
46//! .customer(customer)
47//! .build()?;
48//!
49//! // Enviar para análise
50//! let response = client.analyze(&order).await?;
51//! println!("Recomendação: {:?}", response.order.recommendation);
52//!
53//! Ok(())
54//! }
55//! ```
56//!
57//! ## Gerenciando Listas
58//!
59//! ```no_run
60//! use konduto::{KondutoClient, email::Email};
61//! use konduto::kind::DecisionListKind;
62//! use konduto::sdk::decision_list::http::requests::DecisionListEntryRequest;
63//!
64//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
65//! let client = KondutoClient::new()?;
66//!
67//! // Bloquear um email
68//! let email = Email::try_from("fraud@example.com")?;
69//! let request = DecisionListEntryRequest::email(
70//! DecisionListKind::Blocklist,
71//! email,
72//! None
73//! );
74//! client.add_to_list(request).await?;
75//! # Ok(())
76//! # }
77//! ```
78//!
79//! ## Features
80//!
81//! - `statsd`: Habilita métricas automáticas via StatsD/DogStatsD
82//!
83//! ## Links
84//!
85//! - [Documentação da API Konduto](https://docs.konduto.com)
86//! - [Repositório GitHub](https://github.com/alefhsousa/konduto-rs)
87//! - [Exemplos](https://github.com/alefhsousa/konduto-rs/tree/main/examples)
88
89pub mod environment;
90mod errors;
91mod sdk;
92mod supports;
93mod types;
94
95// Re-exportar os tipos principais
96pub use errors::error::{KondutoError, KondutoResult};
97pub use sdk::client::konduto_client::KondutoClient;
98pub use types::*;
99
100#[cfg(feature = "statsd")]
101pub use sdk::metrics::*;
102
103pub mod prelude {
104 pub use crate::supports::*;
105 pub use crate::types::*;
106 pub use crate::environment::*;
107
108 #[cfg(feature = "statsd")]
109 pub use crate::sdk::metrics::*;
110 pub use crate::sdk::*;
111}