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 fntrả về mộtResult. Để 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
Streamcác kết quả. Hãy đọc nó bằng.next().await. - Lỗi là một enum
Errorduy nhất với bốn biến thể.Error::retry_aftertrả 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::Clientcủ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 trongtokio::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-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()),
}