Lingara Lingara Dokumentasi Panduan API Pustaka Aplikasi Buat Aplikasi web
Bahasa: Bahasa Indonesia

Rust

Halaman ini diterjemahkan dari bahasa Inggris. Jika keduanya berbeda, halaman bahasa Inggris yang benar. Baca halaman bahasa Inggris

Pustaka Rust adalah crate lingara di crates.io. Pustaka ini membutuhkan Rust 1.87 atau lebih baru dan berjalan di runtime Tokio. TLS berasal dari rustls secara default, atau dari TLS bawaan platform melalui sebuah feature.

Cara pemakaiannya

  • Setiap panggilan adalah async fn yang mengembalikan Result. Untuk membatalkan panggilan, drop future-nya; untuk membatalkan stream, drop stream-nya.
  • Stream tiba begitu header respons tiba, sebagai Stream berisi hasil. Baca dengan .next().await.
  • Error berupa satu enum Error dengan empat varian. Error::retry_after mengembalikan waktu tunggu yang disebutkan API, jika ada.
  • Bangun klien dengan Client::builder(). Untuk berbagi connection pool, berikan reqwest::Client milik Anda sendiri, tetapi jangan beri klien itu batas waktu total, karena jika tidak ia akan memotong stream yang panjang. Untuk tenggat pada satu panggilan, bungkus panggilan itu dengan tokio::time::timeout.

Contoh di bawah ini memasang crate, membuat klien, men-stream daftar kosakata, dan menangani 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()),
}

Yang dibungkus halaman ini