Rust
این صفحه از انگلیسی ترجمه شده است. اگر این دو با هم فرق داشته باشند، صفحهٔ انگلیسی درست است. صفحهٔ انگلیسی را بخوانید
کتابخانه Rust همان کریت lingara در crates.io است. به Rust 1.87 یا بالاتر ضرورت دارد و روی محیط اجرای Tokio کار میکند. TLS به طور پیشفرض از rustls میآید، یا از طریق یک ویژگی اختیاری از TLS خود پلتفورم.
در عمل چطور است
- هر فراخوانی یک
async fnاست کهResultبرمیگرداند. برای لغو یک فراخوانی، future آن را رها کنید؛ برای لغو یک جریان، خود جریان را رها کنید. - جریان به مجرد رسیدن سرخطهای جواب میرسد، به شکل یک
Streamاز نتایج. آن را با.next().awaitبخوانید. - خطاها یک enum واحد به نام
Errorبا چهار حالت هستند.Error::retry_afterمدت انتظاری را که API گفته، اگر وجود داشته باشد، برمیگرداند. - کلاینت را با
Client::builder()بسازید. برای شریک ساختن یک مخزن اتصال،reqwest::Clientخودتان را به آن بدهید، اما به آن کلاینت هیچ مهلت کلی ندهید، ورنه جریانهای طولانی را نیمهکاره قطع میکند. برای تعیین مهلت یک فراخوانی، آن را داخلtokio::time::timeoutبپیچانید.
نمونههای پایین کریت را نصب میکنند، یک کلاینت میسازند، لستی از لغات را جریانی دریافت میکنند و یک خطا را رسیدگی میکنند.
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()),
}