use halbu::{Save, Strictness};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let bytes = std::fs::read("assets/test/Joe.d2s")?;
let strict = Save::parse(&bytes, Strictness::Strict)?;
println!(
"Strict parse OK: format={:?}, name={}",
strict.save.format(),
strict.save.character.name
);
let validation = strict.save.validate();
println!("\nValidation issues: {}", validation.issues.len());
for (index, issue) in validation.issues.iter().enumerate() {
println!("#{index} [{:?}] {}", issue.code, issue.message);
}
let mut damaged = bytes.clone();
damaged[0] = 0x00;
damaged.truncate(220);
let lax = Save::parse(&damaged, Strictness::Lax)?;
println!("\nLax parse issues: {}", lax.issues.len());
for (index, issue) in lax.issues.iter().enumerate() {
println!(
"#{index} [{:?}/{:?}] section={:?} offset={:?} expected={:?} found={:?}\n {}",
issue.severity,
issue.kind,
issue.section,
issue.offset,
issue.expected,
issue.found,
issue.message
);
}
match Save::parse(&damaged, Strictness::Strict) {
Ok(_) => println!("\nUnexpected: strict parse accepted damaged payload."),
Err(error) => println!("\nStrict parse error: {error}"),
}
Ok(())
}