Integre Dodo Payments em suas aplicações Rust com um SDK fortemente tipado, orientado a async, construído sobre Tokio e reqwest
O SDK Rust fornece acesso conveniente, orientado a async, à API REST do Dodo Payments a partir de aplicações escritas em Rust. Oferece requisições e respostas fortemente tipadas, auxiliares de paginação embutidos, e timeouts e ambientes configuráveis.
Por padrão, Client::from_env() lê sua chave de API da variável de ambiente DODO_PAYMENTS_API_KEY e usa o URL base padrão, a menos que você defina DODO_PAYMENTS_BASE_URL:
Você também pode configurar o cliente explicitamente. Client::new retorna um Result, então descompacte-o com ? dentro de uma função que retorna dodopayments::Result:
use dodopayments::{Client, ClientConfig};#[tokio::main]async fn main() -> dodopayments::Result<()> { let client = Client::new( ClientConfig::new("https://live.dodopayments.com").with_api_key("My API Key"), )?; println!("{}", client.base_url()); Ok(())}
O URL base padrão é https://live.dodopayments.com. Selecione outro ambiente com o enum Environment em vez de codificar URLs diretamente:
use dodopayments::{Client, ClientConfig, Environment};let client = Client::new( ClientConfig::from_environment(Environment::TestMode).with_api_key("My API Key"),)?;
Para continuar lendo a chave de API de DODO_PAYMENTS_API_KEY via from_env() enquanto direciona para um ambiente não padrão, sobreponha isso na configuração:
use dodopayments::{Client, ClientConfig, Environment};let client = Client::new(ClientConfig::from_env()?.with_environment(Environment::TestMode))?;
billing requer no mínimo o código ISO de duas letras country. customer é um enum CustomerRequest — passe AttachExisting para um cliente existente ou New para um novo. Campos de valor como product_price estão na menor denominação de moeda (por exemplo, 2500 = $25,00 USD).
Os endpoints de lista retornam uma página tipada cujo campo items contém a página atual de resultados. Transmita cada item em todas as páginas com into_stream:
use futures::StreamExt;let mut items = Box::pin( client .payments() .list() .query(serde_json::json!({})) .await? .into_stream(),);while let Some(item) = items.next().await { let item = item?; println!("{item:?}");}
Ou avance uma página por vez com get_next_page:
let mut page = client .payments() .list() .query(serde_json::json!({})) .await?;loop { for item in &page.items { println!("{item:?}"); } match page.get_next_page().await? { Some(next) => page = next, None => break, }}
Todos os métodos retornam um dodopayments::Result<T>. Falhas são representadas pelo enum dodopayments::Error. Faça um match para lidar com erros da API distintamente de erros de transporte: