use std::io::{Read, Write};
use crate::{error::MatrixError, matrix::Matrix};
pub fn read<T, const ROW: usize, const COL: usize>(
path: &std::path::Path,
index: usize,
) -> Result<Matrix<T, ROW, COL>, Box<dyn std::error::Error>>
where
T: Clone + for<'a> serde::Deserialize<'a>,
{
let mut file = std::fs::File::open(path)?;
let mut mats_string = String::new();
file.read_to_string(&mut mats_string)?;
let mats: Vec<Matrix<T, ROW, COL>> = serde_json::from_str(&mats_string)?;
match mats.get(index - 1) {
Some(mat) => Ok(mat.to_owned()),
None => Err(Box::new(MatrixError::OutOfLength(mats.len(), index))),
}
}
pub fn write<T, const ROW: usize, const COL: usize>(
mats: &[&Matrix<T, ROW, COL>],
path: &std::path::Path,
) -> Result<(), Box<dyn std::error::Error>>
where
T: serde::Serialize,
{
let mut file = std::fs::File::create(path)?;
let mats_string = serde_json::to_string(&mats)?;
file.write(mats_string.as_bytes())?;
Ok(())
}