Lingara Lingara مستندات راهنماها API کتابخانه‌ها برنامه‌ها ساخت نسخهٔ وب
زبان: فارسی

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

آنچه این صفحه دربر می‌گیرد