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 fnyang mengembalikanResult. Untuk membatalkan panggilan, drop future-nya; untuk membatalkan stream, drop stream-nya. - Stream tiba begitu header respons tiba, sebagai
Streamberisi hasil. Baca dengan.next().await. - Error berupa satu enum
Errordengan empat varian.Error::retry_aftermengembalikan waktu tunggu yang disebutkan API, jika ada. - Bangun klien dengan
Client::builder(). Untuk berbagi connection pool, berikanreqwest::Clientmilik 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 dengantokio::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-threadRust
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()),
}