Lingara Lingara ឯកសារ មគ្គុទ្ទេសក៍សិក្សា API បណ្ណាល័យ កម្មវិធី បង្កើត កម្មវិធីលើបណ្ដាញ
ភាសា: ខ្មែរ

Rust

ទំព័រនេះត្រូវបានបកប្រែពីភាសាអង់គ្លេស។ ប្រសិនបើទាំងពីរខុសគ្នា ទំព័រភាសាអង់គ្លេសគឺត្រឹមត្រូវ។ អានទំព័រភាសាអង់គ្លេស

បណ្ណាល័យ Rust គឺជា crate lingara នៅលើ crates.io។ វាត្រូវការ Rust 1.87 ឬថ្មីជាងនេះ ហើយដំណើរការលើ runtime Tokio។ TLS មកពី rustls តាមលំនាំដើម ឬពី TLS ផ្ទាល់របស់វេទិកាតាមរយៈ feature មួយ។

របៀបប្រើវា

  • ការហៅនីមួយៗគឺជា async fn ដែលត្រឡប់ Result។ ដើម្បីបោះបង់ការហៅ សូម drop future របស់វា ដើម្បីបោះបង់ស្ទ្រីម សូម drop ស្ទ្រីមនោះ។
  • ស្ទ្រីមមកដល់ភ្លាមៗនៅពេលក្បាលការឆ្លើយតបមកដល់ ជា Stream នៃលទ្ធផល។ អានវាដោយ .next().await។
  • កំហុសគឺជា enum Error តែមួយដែលមានបួនវ៉ារ្យ៉ង់។ Error::retry_after ត្រឡប់ពេលរង់ចាំដែល API បានប្រាប់ ប្រសិនបើមាន។
  • បង្កើតក្លាយអិនដោយ Client::builder()។ ដើម្បីចែករំលែក connection pool សូមផ្តល់ reqwest::Client ផ្ទាល់ខ្លួនរបស់អ្នកឱ្យវា ប៉ុន្តែកុំផ្តល់ការកំណត់ពេលសរុបដល់ក្លាយអិននោះ បើមិនដូច្នោះទេ វានឹងកាត់ស្ទ្រីមវែងៗឱ្យខ្លី។ សម្រាប់ពេលកំណត់លើការហៅមួយ សូមរុំវាក្នុង tokio::time::timeout។

គំរូខាងក្រោមដំឡើង crate បង្កើតក្លាយអិន ស្ទ្រីមបញ្ជីវាក្យសព្ទ និងដោះស្រាយកំហុសមួយ។

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

អ្វីដែលទំព័រនេះរុំ