use std::env;
use bindist::{Client, GetDownloadInfoOptions, ListApplicationsOptions, ListVersionsOptions};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = env::var("BINDIST_API_KEY").map_err(|_| "BINDIST_API_KEY is required")?;
let base_url =
env::var("BINDIST_BASE_URL").unwrap_or_else(|_| "https://api.bindist.eu".to_owned());
println!("Using base URL: {base_url}\n");
let client = Client::new(base_url, api_key)?;
println!("=== List Applications ===");
let apps = client
.list_applications(&ListApplicationsOptions::default())
.await?;
println!("Found {} applications", apps.items.len());
for app in &apps.items {
println!(" - {} ({})", app.name, app.application_id);
if let Some(desc) = &app.description {
println!(" Description: {desc}");
}
if !app.tags.is_empty() {
println!(" Tags: {:?}", app.tags);
}
}
let Some(first_app) = apps.items.first() else {
println!("\nNo applications; stopping.");
return Ok(());
};
let app_id = &first_app.application_id;
println!("\n=== List Versions for {app_id} ===");
let versions = client
.list_versions(app_id, &ListVersionsOptions::default())
.await?;
println!("Found {} versions", versions.items.len());
for v in &versions.items {
println!(
" - {} (enabled: {}, size: {} bytes)",
v.version, v.is_enabled, v.file_size
);
if let Some(notes) = &v.release_notes {
println!(" Release notes: {notes}");
}
}
let Some(first_version) = versions.items.first() else {
return Ok(());
};
let version = &first_version.version;
println!("\n=== List Files for {app_id} v{version} ===");
let files = client.list_version_files(app_id, version).await?;
println!("Found {} files", files.len());
for f in &files {
println!(
" - {} ({:?}, {} bytes)",
f.file_name, f.file_type, f.file_size
);
}
println!("\n=== Get Download Info for {app_id} v{version} ===");
let info = client
.get_download_info(app_id, version, &GetDownloadInfoOptions::default())
.await?;
let preview: String = info.url.chars().take(50).collect();
println!("Download URL: {preview}...");
println!("File name: {}", info.file_name);
println!("File size: {} bytes", info.file_size);
println!("Checksum: {}", info.checksum);
println!("Expires at: {}", info.expires_at);
println!("\n=== All tests passed! ===");
Ok(())
}