use xisf_header::{Fixed, Header, StructuralHints};
fn main() -> Result<(), xisf_header::Error> {
let mut header = Header::new();
header.set("IMAGETYP", "Master Dark")?;
header.set_comment("IMAGETYP", "Type of image")?;
header.set("EXPTIME", Fixed(300.0, 2))?; header.set("GAIN", 100_i64)?;
header.append("HISTORY", "reduced with siril")?;
header.append("HISTORY", "stacked 20x300s")?;
header.set_property("Observation:Object:Name", "NGC 7000")?;
header.set_property_with_type("Instrument:Telescope:FocalLength", "0.53", "Float32")?;
let hints = StructuralHints::default();
let header_bytes = header.to_header_bytes(&hints);
assert_eq!(Header::parse(&header_bytes)?, header);
let path = std::env::temp_dir().join("xisf-header-quickstart.xisf");
let mut container = header_bytes;
container.push(0);
std::fs::write(&path, &container)?;
let reloaded = Header::read_from_file(&path)?;
assert_eq!(reloaded, header);
assert_eq!(reloaded.get_str("IMAGETYP")?, Some("Master Dark"));
assert_eq!(reloaded.get_str("EXPTIME")?, Some("300.00"));
assert_eq!(reloaded.get_i64("GAIN")?, Some(100));
assert_eq!(reloaded.count("HISTORY"), 2);
assert_eq!(
reloaded.property("Observation:Object:Name"),
Some("NGC 7000")
);
assert_eq!(
reloaded.property_get::<f64>("Instrument:Telescope:FocalLength"),
Some(0.53)
);
Header::update_file(&path, |h| {
h.set("OBJECT", "NGC 7000")?;
Ok(())
})?;
assert_eq!(std::fs::read(&path)?.last(), Some(&0)); std::fs::remove_file(&path).ok();
println!("quickstart header round-tripped successfully");
Ok(())
}