Lingara Lingara Dokumentasi Panduan API Pustaka Aplikasi Bina Apl web
Bahasa: Bahasa Melayu

Rust

Halaman ini diterjemahkan daripada bahasa Inggeris. Jika kedua-duanya berbeza, halaman bahasa Inggeris adalah yang betul. Baca halaman bahasa Inggeris

Pustaka Rust ialah crate lingara di crates.io. Ia memerlukan Rust 1.87 atau lebih baharu dan berjalan pada runtime Tokio. TLS datang daripada rustls secara lalai, atau daripada TLS platform itu sendiri melalui sebuah feature.

Cara ia digunakan

  • Setiap panggilan ialah async fn yang memulangkan Result. Untuk membatalkan panggilan, drop future-nya; untuk membatalkan strim, drop strim itu.
  • Strim tiba sebaik sahaja pengepala respons tiba, sebagai Stream hasil. Bacanya dengan .next().await.
  • Ralat ialah satu enum Error dengan empat varian. Error::retry_after memulangkan tempoh menunggu yang dinyatakan oleh API, jika ada.
  • Bina klien dengan Client::builder(). Untuk berkongsi connection pool, berikan reqwest::Client anda sendiri, tetapi jangan berikan klien itu had masa keseluruhan, jika tidak ia akan memotong strim yang panjang. Untuk tarikh akhir pada satu panggilan, balutnya dalam tokio::time::timeout.

Contoh di bawah memasang crate, mencipta klien, menstrim senarai perbendaharaan kata dan mengendalikan ralat.

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()),
}

Perkara yang dibalut oleh halaman ini