Rust
यह पेज अंग्रेज़ी से अनुवादित है। अगर दोनों में अंतर हो, तो अंग्रेज़ी पेज सही है। अंग्रेज़ी पेज पढ़ें
Rust लाइब्रेरी crates.io पर lingara crate है। इसके लिए Rust 1.87 या उसके बाद का संस्करण चाहिए और यह Tokio रनटाइम पर चलती है। TLS डिफ़ॉल्ट रूप से rustls से आता है, या किसी feature के ज़रिए प्लेटफ़ॉर्म के अपने TLS से।
इसे कैसे इस्तेमाल करें
- हर कॉल एक
async fnहै जोResultलौटाती है। किसी कॉल को रद्द करने के लिए, उसका future drop करें; स्ट्रीम रद्द करने के लिए, स्ट्रीम को drop करें। - स्ट्रीम रिस्पॉन्स हेडर आते ही आ जाती है, नतीजों की एक
Streamके रूप में। इसे.next().awaitसे पढ़ें। - एरर चार वेरिएंट वाला एक
Errorenum है।Error::retry_afterवह इंतज़ार लौटाता है जो API ने बताया था, अगर बताया गया हो। Client::builder()से क्लाइंट बनाएँ। कनेक्शन पूल साझा करने के लिए, इसे अपना खुद काreqwest::Clientदें, लेकिन उस क्लाइंट को कोई कुल टाइमआउट न दें, वरना वह लंबी स्ट्रीम्स को बीच में काट देगा। किसी एक कॉल पर डेडलाइन के लिए, उसेtokio::time::timeoutमें लपेटें।
नीचे दिए उदाहरण crate इंस्टॉल करते हैं, क्लाइंट बनाते हैं, शब्दावली सूची स्ट्रीम करते हैं और एक एरर संभालते हैं।
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()),
}