use hdf5_pure::{File, FileBuilder};
fn main() {
let records = [(1i8, 20u64, 3.5f32), (2, 30, 4.5), (3, 40, 5.5)];
let mut builder = FileBuilder::new();
builder
.create_dataset("records")
.with_compound_values(&records)
.expect("encode compound");
let waveform = [(1.0f64, 0.0f64), (0.0, 1.0), (-1.0, 0.0)];
builder
.create_dataset("waveform")
.with_complex64_data(&waveform);
let file = File::from_bytes(builder.finish().unwrap()).unwrap();
let back = file
.dataset("records")
.unwrap()
.read_compound::<(i8, u64, f32)>()
.unwrap();
println!("records: {back:?}");
assert_eq!(back, records);
let dtype = file.dataset("records").unwrap().dtype().unwrap();
println!("records datatype: {dtype:?}");
let dtype = file.dataset("waveform").unwrap().dtype().unwrap();
println!("waveform datatype: {dtype:?}");
let raw = file.dataset("waveform").unwrap().read_raw().unwrap();
let back_wave = decode_complex64(&raw);
println!("waveform (real, imag): {back_wave:?}");
assert_eq!(back_wave, waveform);
println!("\ncompound and complex round-trips verified");
}
fn decode_complex64(raw: &[u8]) -> Vec<(f64, f64)> {
raw.chunks_exact(16)
.map(|rec| {
let re = f64::from_le_bytes(rec[0..8].try_into().unwrap());
let im = f64::from_le_bytes(rec[8..16].try_into().unwrap());
(re, im)
})
.collect()
}