ruSPARSE 0.1.1

Ruda's sparse-computing library, reusing shared tensors, runtimes, and device backends.
Documentation
use crate::{CsrMatrixOwned, IndexBase};
use ::serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error};

impl Serialize for CsrMatrixOwned {
    fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
        (
            self.rows,
            self.columns,
            &self.row_offsets,
            &self.column_indices,
            &self.values,
            self.index_base.value(),
        ).serialize(serializer)
    }
}

impl<'de> Deserialize<'de> for CsrMatrixOwned {
    fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
        let (rows, columns, offsets, indices, values, base) =
            <(usize, usize, Vec<u32>, Vec<u32>, Vec<f32>, u32)>::deserialize(deserializer)?;
        let base = match base {
            0 => IndexBase::Zero,
            1 => IndexBase::One,
            _ => return Err(D::Error::custom("CSR index base must be zero or one")),
        };
        Self::new(rows, columns, offsets, indices, values, base).map_err(D::Error::custom)
    }
}