Rust
Bu sayfa İngilizceden çevrilmiştir. İkisi arasında fark varsa İngilizce sayfa doğrudur. İngilizce sayfayı oku
Rust kütüphanesi, crates.io üzerindeki lingara crate’idir. Rust 1.87 veya üstünü gerektirir ve Tokio çalışma zamanında çalışır. TLS varsayılan olarak rustls’ten ya da bir feature aracılığıyla platformun kendi TLS’inden gelir.
Kullanımı nasıldır
- Her çağrı bir
async fn’dir ve birResultdöndürür. Bir çağrıyı iptal etmek için future’ını bırakın (drop); bir akışı iptal etmek için akışı bırakın. - Bir akış, yanıt başlıkları gelir gelmez sonuçlardan oluşan bir
Streamolarak gelir. Onu.next().awaitile okuyun. - Hatalar, dört varyantlı tek bir
Errorenum’udur.Error::retry_after, API bir bekleme süresi belirttiyse o süreyi döndürür. Client::builder()ile bir istemci oluşturun. Bir bağlantı havuzunu paylaşmak için ona kendireqwest::Clientörneğinizi verin, ancak o istemciye toplam zaman aşımı vermeyin; yoksa uzun akışları erken keser. Tek bir çağrıya son süre koymak için onutokio::time::timeoutile sarın.
Aşağıdaki örnekler crate’i kurar, bir istemci oluşturur, bir kelime listesini akış hâlinde alır ve bir hatayı işler.
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()),
}