use xlb::{
AssetClass, AssetClassConfig, BandwidthPolicy, BwCaps, Discovery, PeerTier, SeedRole,
};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let class = AssetClass::register(AssetClassConfig {
name: "my-app-assets",
permanent_seeds: vec![],
cdn_fallback: Some("https://cdn.example.com/assets/{blake3}".into()),
discovery: Discovery::default(), bandwidth: BandwidthPolicy::default()
.role(PeerTier::Cloud, BwCaps { up_mbit: 1000, down_mbit: 10_000 })
.role(PeerTier::Rig, BwCaps { up_mbit: 10, down_mbit: 100 })
.role(PeerTier::Workstation, BwCaps { up_mbit: 5, down_mbit: 50 })
.role(PeerTier::Mobile, BwCaps::passive()),
cache_dir: None,
cache_budget_bytes: 1024 * 1024 * 1024, })
.await?;
class.set_role(SeedRole::Participant, PeerTier::Workstation).await?;
let gov = class.governor();
let caps = gov.effective_caps(PeerTier::Workstation);
let seeding = if gov.is_passive() { "paused (battery or metered)" } else { "active" };
println!("class: {}", class.name());
println!("seeding: {} — {} Mbit/s up, {} Mbit/s down", seeding, caps.up_mbit, caps.down_mbit);
println!();
println!("To fetch a blob once you have its BLAKE3 hash:");
println!(" let hash: xlb::BlakeHash = \"<64-char hex>\".parse()?;");
println!(" let bytes = class.asset(hash).fetch().await?;");
println!();
println!("fetch() tries: cache → LAN peers → swarm → seeds → CDN (in that order).");
println!("Every byte is BLAKE3-verified regardless of source.");
Ok(())
}