Lingara Lingara Tài liệu Cẩm nang API Thư viện Ứng dụng Tạo Ứng dụng web
Ngôn ngữ: Tiếng Việt

Rust

Trang này được dịch từ tiếng Anh. Nếu hai bản khác nhau, trang tiếng Anh là bản đúng. Đọc trang tiếng Anh

Thư viện Rust là crate lingara trên crates.io. Thư viện cần Rust 1.87 trở lên và chạy trên môi trường thực thi Tokio. TLS mặc định do rustls cung cấp, hoặc do TLS riêng của nền tảng thông qua một tính năng (feature).

Cách sử dụng

  • Mọi lệnh gọi đều là một async fn trả về một Result. Để hủy một lệnh gọi, hãy hủy bỏ (drop) future của nó; để hủy một luồng, hãy hủy bỏ luồng đó.
  • Luồng xuất hiện ngay khi tiêu đề phản hồi đến, dưới dạng một Stream các kết quả. Hãy đọc nó bằng .next().await.
  • Lỗi là một enum Error duy nhất với bốn biến thể. Error::retry_after trả về thời gian chờ mà API đã nêu, nếu có.
  • Tạo máy khách bằng Client::builder(). Để dùng chung một nhóm kết nối, hãy đưa cho nó reqwest::Client của riêng bạn, nhưng đừng đặt thời gian chờ tổng cho máy khách đó, nếu không nó sẽ cắt ngang các luồng dài. Để đặt hạn chót cho một lệnh gọi, hãy bọc lệnh gọi trong tokio::time::timeout.

Các mẫu dưới đây cài đặt crate, tạo máy khách, phát trực tuyến một danh sách từ vựng và xử lý lỗi.

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

Những gì trang này bao bọc