#![allow(
clippy::print_stdout,
reason = "runnable example: it prints the qb64 forms it produces"
)]
use cesr::core::matter::builder::MatterBuilder;
use cesr::core::matter::code::{DigestCode, VerKeyCode};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
let key_bytes: [u8; 32] = [
0x3b, 0x6a, 0x27, 0xbc, 0xce, 0xb6, 0xa4, 0x2d, 0x62, 0xa3, 0xa8, 0xd0, 0x2a, 0x6f, 0x0d,
0x73, 0x65, 0x32, 0x15, 0x77, 0x1d, 0xe2, 0x43, 0xa6, 0x3a, 0xc0, 0x48, 0xa1, 0x8b, 0x59,
0xda, 0x29,
];
let verfer = MatterBuilder::new()
.with_code(VerKeyCode::Ed25519)
.with_raw(&key_bytes[..])?
.build()?;
let verfer_text = verfer.to_qb64();
println!("Verfer (Ed25519 public key) qb64: {verfer_text}");
assert!(
verfer_text.starts_with('D'),
"Ed25519 transferable verfer must carry code 'D', got {verfer_text}"
);
let decoded = MatterBuilder::new().from_qualified_base64(verfer_text.as_bytes())?;
assert_eq!(
decoded.raw(),
&key_bytes[..],
"decode(encode(key)) must recover the original raw bytes"
);
let diger = MatterBuilder::new()
.with_code(DigestCode::Blake3_256)
.with_raw(&key_bytes[..])?
.build()?;
let diger_text = diger.to_qb64();
println!("Diger (Blake3-256 digest) qb64: {diger_text}");
assert!(
diger_text.starts_with('E'),
"Blake3-256 digest must carry code 'E', got {diger_text}"
);
assert_ne!(
verfer_text, diger_text,
"identical bytes under different codes must produce different qb64"
);
println!("Round-trip and code-prefix checks passed.");
Ok(())
}