use ag_id::{DeriveDomain, Did};
fn main() {
let typed = Did::derive(DeriveDomain::User, b"alice@example.com");
let s = typed.to_did_string();
println!("produced: {s}");
let parsed: Did = s.parse().expect("valid did:agid string");
println!("parsed: {parsed} domain={}", parsed.domain());
assert!(typed.eq_bytes(&parsed));
println!("eq_bytes: ✓");
assert_ne!(typed, parsed);
println!("PartialEq is stricter: typed ≠ opaque (by design)");
println!("\nparse failures:");
for s in [
"did:other:abc",
"did:agid:",
"did:agid:O0Il",
"did:agid:thisIsTooLongForA32ByteHashEncodedInBase58000000",
] {
match s.parse::<Did>() {
Ok(_) => println!(" {s:>50} unexpectedly parsed"),
Err(e) => println!(" {s:>50} → {e}"),
}
}
}