Rust
هذه الصفحة مترجمة من الإنجليزية. إذا اختلفت النسختان، فالصفحة الإنجليزية هي الصحيحة. اقرأ الصفحة الإنجليزية
مكتبة Rust هي الحزمة lingara على crates.io. تحتاج إلى Rust 1.87 أو أحدث وتعمل على بيئة التشغيل Tokio. يأتي TLS من rustls افتراضيًا، أو من TLS الخاص بالمنصة عبر ميزة اختيارية.
كيف تبدو في الاستخدام
- كل استدعاء هو
async fnتعيدResult. لإلغاء استدعاء، تخلّص من الـ future الخاص به؛ ولإلغاء تدفق، تخلّص من التدفق. - يصل التدفق بمجرد وصول ترويسات الاستجابة، على شكل
Streamمن النتائج. اقرأه باستخدام.next().await. - الأخطاء تعداد
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()),
}