use std::io;
use std::fs::File;
use serde_pickle;
fn main() -> io::Result<()> {
read_example()?;
write_example()?;
Ok(())
}
fn read_example() -> Result<(), io::Error> {
let file = io::BufReader::new(File::open("test-data/pickle.npy")?);
let npy = npyz::NpyFile::new(file)?;
assert_eq!(npy.shape(), &[2, 3]);
println!("DType: {}", npy.dtype().descr());
println!("Shape: {:?}", npy.shape());
println!("Strides: {:?}", npy.strides());
let file = npy.into_inner();
let de_options = Default::default();
let value = serde_pickle::value_from_reader(file, de_options).map_err(pickle_err_to_io_err)?;
println!("Pickled value: {:?}", value);
Ok(())
}
fn write_example() -> Result<(), io::Error> {
use npyz::WriterBuilder;
let type_str = "|O".parse().unwrap();
let dtype = npyz::DType::new_scalar(type_str);
let mut file = io::BufWriter::new(File::create("examples/output/pickle-corrupt.npy")?);
npyz::WriteOptions::new_header_only()
.dtype(dtype)
.shape(&[2, 3])
.writer(&mut file)
.write_header_only()?;
Ok(())
}
fn pickle_err_to_io_err(error: serde_pickle::Error) -> io::Error {
match error {
serde_pickle::Error::Io(e) => e,
error => io::Error::new(io::ErrorKind::Other, error.to_string()),
}
}