Lingara Lingara Documentación Guías API Bibliotecas Apps Crear Aplicación web
Idioma: Español

Rust

Esta página está traducida del inglés. Si ambas difieren, la página en inglés es la correcta. Leer la página en inglés

La biblioteca de Rust es el crate lingara en crates.io. Necesita Rust 1.87 o posterior y se ejecuta sobre el runtime Tokio. El TLS lo proporciona rustls por defecto, o el TLS propio de la plataforma mediante una feature.

Cómo se usa

  • Cada llamada es una async fn que devuelve un Result. Para cancelar una llamada, descarta su future; para cancelar un flujo, descarta el flujo.
  • Un flujo llega en cuanto llegan las cabeceras de la respuesta, como un Stream de resultados. Léelo con .next().await.
  • Los errores son un único enum Error con cuatro variantes. Error::retry_after devuelve la espera que indicó la API, cuando la hubo.
  • Construye un cliente con Client::builder(). Para compartir un pool de conexiones, pásale tu propio reqwest::Client, pero no le pongas a ese cliente un tiempo de espera total, o cortará antes de tiempo los flujos largos. Para poner un plazo a una sola llamada, envuélvela en tokio::time::timeout.

Los ejemplos de abajo instalan el crate, crean un cliente, reciben en flujo una lista de vocabulario y gestionan un error.

Rust

cargo add lingara@0.1.0-alpha.6
cargo add tokio --features macros,rt-multi-thread

Rust

use lingara::Client;

let client = Client::builder()
    .client_credentials(std::env::var("LINGARA_CLIENT_ID")?, std::env::var("LINGARA_CLIENT_SECRET")?)
    .build()?;

Rust

use lingara::models::{GenerateVocabularyEvent, VocabRequest};
use std::num::NonZeroU8;

let request = VocabRequest { level: 2, source_lang: "en".into(), target_lang: "zh".into(), count: NonZeroU8::new(8) };
let mut stream = client.generate_vocabulary(&request).await?;
while let Some(event) = stream.next().await {
    if let GenerateVocabularyEvent::Item(item) = event? {
        println!("{} {}", item.word, item.translation);
    }
}

Rust

use lingara::Error;

let result = client.get_usage().await;
if let Some(wait) = result.as_ref().err().and_then(Error::retry_after) {
    eprintln!("the API asks you to retry after {wait:?}");
}
match result {
    Ok(usage) => println!("{} allowance rows", usage.allowance.len()),
    // A refusal from the API: status, code (stable) and message (localised).
    Err(Error::Api(e)) => eprintln!("{} {} {}", e.status, e.code, e.message),
    // The token endpoint refused the credentials or the scopes.
    Err(Error::OAuth(e)) => eprintln!("{} {} {}", e.status, e.error, e.description.unwrap_or_default()),
    Err(Error::Maintenance(_)) => eprintln!("the API is under maintenance"),
    // No usable answer: connect, tls, reset, timeout, and so on.
    Err(Error::Transport(e)) => eprintln!("transport: {}", e.kind),
    Err(other) => return Err(other.into()),
}

Qué envuelve esta página