use hdf5_pure::{Error, File, FileBuilder, H5Element};
fn store<T: H5Element>(builder: &mut FileBuilder, name: &str, values: &[T]) {
builder.create_dataset(name).with_data(values);
}
fn load<T: H5Element>(file: &File, name: &str) -> Result<Vec<T>, Error> {
file.dataset(name)?.read::<T>()
}
fn main() {
let mut builder = FileBuilder::new();
store(&mut builder, "u32s", &[1u32, 2, 3]);
store(&mut builder, "i16s", &[-1i16, 0, 7]);
store(&mut builder, "f64s", &[1.5f64, 2.5, 3.5]);
let file = File::from_bytes(builder.finish().unwrap()).unwrap();
let counts: Vec<u32> = load(&file, "u32s").unwrap();
let offsets: Vec<i16> = load(&file, "i16s").unwrap();
let readings = file.dataset("f64s").unwrap().read::<f64>().unwrap();
println!("u32s: {counts:?}");
println!("i16s: {offsets:?}");
println!("f64s: {readings:?}");
assert_eq!(counts, vec![1, 2, 3]);
assert_eq!(offsets, vec![-1, 0, 7]);
assert_eq!(readings, vec![1.5, 2.5, 3.5]);
let widened: Vec<f64> = load(&file, "i16s").unwrap();
assert_eq!(widened, vec![-1.0, 0.0, 7.0]);
println!("\ngeneric round-trip verified (including i16 -> f64 widening)");
}