Rust Wrapper

Crate nxgate memberikan API async-first berbasis Tokio dengan dukungan penuh untuk verifikasi, retry exponential backoff, dan caching in-memory.

Instalasi

Cargo.toml
1# Cargo.toml
2[dependencies]
3nxgate = "1.0"
4tokio = { version = "1", features = ["full"] }

Penggunaan Dasar

src/main.rs
1use nxgate::{Client, ClientConfig};
2
3#[tokio::main]
4async fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let client = Client::new(ClientConfig {
6 api_key: std::env::var("NXGATE_API_KEY")?,
7 license_key: "XXXX-XXXX-XXXX-XXXX".to_string(),
8 ..Default::default()
9 });
10
11 let result = client.verify().await?;
12
13 if result.valid {
14 println!("Lisensi valid! Diberikan kepada: {}", result.owner);
15 } else {
16 eprintln!("Verifikasi gagal: {:?}", result.reason);
17 }
18
19 Ok(())
20}

Penggunaan Lanjutan

src/license.rs
1use nxgate::{Client, VerifyOptions, VerificationStatus};
2
3let result = client
4 .verify_with(VerifyOptions {
5 scope: Some("production".into()),
6 metadata: vec![
7 ("hostname".into(), hostname::get()?.to_string_lossy().into()),
8 ("version".into(), env!("CARGO_PKG_VERSION").into()),
9 ],
10 ..Default::default()
11 })
12 .await?;
13
14match result.status {
15 VerificationStatus::Valid => enable_features(),
16 VerificationStatus::IpLimitExceeded => {
17 eprintln!("Lisensi sudah digunakan di terlalu banyak IP");
18 }
19 VerificationStatus::Expired => {
20 eprintln!("Lisensi expired pada {}", result.expires_at.unwrap());
21 }
22 VerificationStatus::RateLimited => {
23 eprintln!("Tunggu {} detik", result.retry_after.unwrap_or(60));
24 }
25 _ => {}
26}

Catatan

Wrapper Rust mendukung feature flags native-tls dan rustls. Pilih sesuai dengan kebutuhan deployment Anda.