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

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