use blazingly_aasa::CompiledAasa;
const ORIGIN: &[u8] = br#"{
"applinks": {
"details": [{
"appIDs": ["ABCDE12345.com.example.app"],
"defaults": { "caseSensitive": false },
"components": [{ "/": "/help/*" }]
}]
}
}"#;
const REFORMATTED: &[u8] = br#"{
"applinks": { "details": [ {
"components": [ { "caseSensitive": false, "/": "/help/*" } ],
"appIDs": [ "ABCDE12345.com.example.app" ]
} ] }
}"#;
const STALE: &[u8] = br#"{
"applinks": {
"details": [{
"appIDs": ["ABCDE12345.com.example.app"],
"components": [{ "/": "/help/*", "caseSensitive": true }]
}]
}
}"#;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let origin = CompiledAasa::parse(ORIGIN)?;
let reformatted = CompiledAasa::parse(REFORMATTED)?;
let stale = CompiledAasa::parse(STALE)?;
let cosmetic = origin.semantic_diff(&reformatted);
println!("origin vs reformatted");
println!(" equivalent: {}", cosmetic.is_equivalent());
println!(
" structurally_equal: {}",
origin.structural_equal(&reformatted)
);
let real = origin.semantic_diff(&stale);
println!();
println!("origin vs stale CDN copy");
println!(" equivalent: {}", real.is_equivalent());
for change in real.changes() {
println!(" {change}");
}
println!();
let url = "https://example.com/HELP/1";
println!("{url}");
println!(
" origin: {}",
origin.decide("example.com", "ABCDE12345.com.example.app", url)?
);
println!(
" stale: {}",
stale.decide("example.com", "ABCDE12345.com.example.app", url)?
);
Ok(())
}