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 fnyang memulangkanResult. Untuk membatalkan panggilan, drop future-nya; untuk membatalkan strim, drop strim itu. - Strim tiba sebaik sahaja pengepala respons tiba, sebagai
Streamhasil. Bacanya dengan.next().await. - Ralat ialah satu enum
Errordengan empat varian.Error::retry_aftermemulangkan tempoh menunggu yang dinyatakan oleh API, jika ada. - Bina klien dengan
Client::builder(). Untuk berkongsi connection pool, berikanreqwest::Clientanda sendiri, tetapi jangan berikan klien itu had masa keseluruhan, jika tidak ia akan memotong strim yang panjang. Untuk tarikh akhir pada satu panggilan, balutnya dalamtokio::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-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()),
}