use std::time::{Duration, SystemTime};
fn main() -> anyhow::Result<()> {
let key = moq_token::Key::generate(moq_token::Algorithm::HS256, Some(moq_token::KeyId::random()))?;
let key_str = key.to_str()?;
println!("Generated key:\n{key_str}\n");
let claims = moq_token::Claims {
root: "demo".to_string(),
publish: vec!["my-stream".to_string()], subscribe: vec!["".to_string()], cluster: false,
expires: Some(SystemTime::now() + Duration::from_secs(3600)),
issued: Some(SystemTime::now()),
};
claims.validate()?;
let token = key.encode(&claims)?;
println!("Signed token:\n{token}\n");
let verified = key.decode(&token)?;
println!("Verified claims:");
println!(" root: {}", verified.root);
println!(" publish: {:?}", verified.publish);
println!(" subscribe: {:?}", verified.subscribe);
let loaded = moq_token::Key::from_str(&key_str)?;
let also_verified = loaded.decode(&token)?;
assert_eq!(also_verified.root, verified.root);
println!("\nKey round-trip successful!");
Ok(())
}