Lingara Lingara المستندات أدلة التعلّم API المكتبات التطبيقات البناء تطبيق الويب
اللغة: العربية

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-thread

Rust

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()),
}

ما تغلّفه هذه الصفحة