Skip to content

SDK de Rust

Agrega el crate arbol-sdk y llama a la API de Arbol desde Rust asíncrono.

Actualizado

arbol-sdk es la API de Arbol sobre HTTPS para servicios en Rust. Sus tipos, sus operaciones y los métodos de su cliente se generan a partir del documento OpenAPI público de la API; usa reqwest con rustls, serde y thiserror, corre en cualquier runtime de Tokio y necesita Rust 1.85 o posterior. El código fuente está en GitHub bajo la licencia Apache 2.0.

Instalar

El crate todavía no está en crates.io. Agrégalo como dependencia de git, fijado a un commit para tener builds reproducibles:

[dependencies]
arbol-sdk = { git = "https://github.com/getarbol/project-arbol-sdk-rust", rev = "<commit>" }
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }

La biblioteca es arbol_sdk. Tokio aparece solo por el #[tokio::main] del ejemplo; el crate corre en cualquier runtime de Tokio.

Crear un cliente y llamar a una operación

use arbol_sdk::{Client, Credential, types};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let arbol = Client::new(Credential::ApiKey(std::env::var("ARBOL_API_KEY")?))?;
    let input = types::AgendaAppointmentsListInput {
        from: Some("2026-10-12T00:00:00Z".into()),
        to: Some("2026-10-19T00:00:00Z".into()),
        ..Default::default()
    };
    let page = arbol.agenda().appointments().list(&input).await?;
    println!("{page:?}");
    Ok(())
}

Cada operación es un método con el nombre de su operation id: account.apiKeys.create es arbol.account().api_keys().create(&input), con types::AccountApiKeysCreateInput de entrada y types::AccountApiKeysCreateOutput de salida.

  • Una credencial. Credential::ApiKey recibe una API key (arb_live_…) para una máquina; Credential::AccessToken recibe el token de acceso de una persona para la audiencia https://api.getarbol.com. Consulta Autenticación.
  • Solo HTTPS. Client::new llama a https://api.getarbol.com, y no sigue ninguna redirección.
  • Los datos, sin envoltorio. Un método devuelve el data del envoltorio de éxito. Una respuesta más grande que el límite de su operación se rechaza.

Tipos

Los tipos siguen el esquema:

  • Un campo opcional es Option<T> y se omite de la solicitud cuando es None.
  • Un campo opcional que también puede ser null es Option<Option<T>>: Some(None) envía null.
  • Una unión es un enum sin etiqueta cuyos miembros se distinguen por sus campos literales.
  • Lo que Rust no puede expresar con exactitud es un serde_json::Value.

Errores

Todo fallo es un arbol_sdk::Error:

Campo Significado
code El código de error estable de la API, como FORBIDDEN, o uno propio del cliente: NETWORK_ERROR, REDIRECT_REFUSED, INVALID_RESPONSE.
message, status, retryable, data El mensaje del error, el estado HTTP, la indicación de reintento de la API y los datos declarados del error.
request_id El id de solicitud que debes citar cuando reportes un problema.
outcome Refused: no pasó nada. NotSent: se detuvo antes de que saliera la solicitud. Unknown: una escritura o una eliminación que puede haber ocurrido.

Nada se reintenta. Una lectura que falla es Refused o NotSent; solo una escritura o una eliminación puede terminar en Unknown, y entonces lees el estado actual antes de repetirla:

use arbol_sdk::{Error, Outcome};

fn report(error: &Error) {
    match error.outcome {
        Outcome::Unknown => eprintln!(
            "{} may have been applied; read its state before repeating (request {:?})",
            error.code, error.request_id
        ),
        Outcome::Refused | Outcome::NotSent => eprintln!("{}: {}", error.code, error.message),
    }
}

Consulta Reintentos.

Versiones

El crate se regenera a mano, así que puede ir por detrás de la API. arbol_sdk::RELEASE nombra el release de la API a partir del que se generó, como 1.20261019.4056, y Cargo.toml lo registra en [package.metadata.arbol.openapi]. Compáralo con el info.version de https://api.getarbol.com/openapi.json: las operaciones agregadas desde entonces no están en el crate hasta que se regenere. La API va en el release 1.20261104.21009 (ver Versiones y actualizaciones).

Escribe para buscar…

↑↓ navegar↵ seleccionarEsc cerrar