Rust
Isinalin mula sa Ingles ang pahinang ito. Kung magkaiba ang dalawa, ang pahinang Ingles ang tama. Basahin ang pahinang Ingles
Ang Rust library ay ang crate na lingara sa crates.io. Kailangan nito ang Rust 1.87 o mas bago at tumatakbo ito sa Tokio runtime. Galing sa rustls ang TLS bilang default, o sa sariling TLS ng platform sa pamamagitan ng isang feature.
Paano ito gamitin
- Ang bawat tawag ay isang
async fnna nagbabalik ngResult. Para kanselahin ang isang tawag, i-drop ang future nito; para kanselahin ang isang stream, i-drop ang stream. - Dumarating ang stream sa sandaling dumating ang mga response header, bilang isang
Streamng mga resulta. Basahin ito gamit ang.next().await. - Ang mga error ay iisang
Errorenum na may apat na variant. Ibinabalik ngError::retry_afterang paghihintay na itinakda ng API, kung mayroon. - Gumawa ng client gamit ang
Client::builder(). Para makibahagi sa isang connection pool, iabot dito ang sarili mongreqwest::Client, pero huwag bigyan ang client na iyon ng kabuuang timeout, dahil puputulin nito nang maaga ang mahahabang stream. Para sa deadline ng isang tawag, balutin ito satokio::time::timeout.
Ini-install ng mga halimbawa sa ibaba ang crate, gumagawa ng client, nag-i-stream ng listahan ng bokabularyo at humahawak ng 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()),
}