tf_idf_vectorizer/utils/math/vector/
serde.rs1use num::Num;
2use serde::{Serialize, Serializer, Deserialize, Deserializer};
3use serde::ser::SerializeStruct;
4use super::ZeroSpVec;
5
6impl<N> Serialize for ZeroSpVec<N>
7where
8 N: Num + Serialize + Copy,
9{
10 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
11 where S: Serializer {
12 let mut state = serializer.serialize_struct("ZeroSpVec", 3)?;
14 state.serialize_field("len", &self.len)?;
15 state.serialize_field("nnz", &self.nnz)?;
16
17 let mut entries = Vec::with_capacity(self.nnz);
19 unsafe {
20 for i in 0..self.nnz {
21 let idx = *self.ind_ptr().add(i);
22 let val = *self.val_ptr().add(i);
23 entries.push((idx, val));
24 }
25 }
26 state.serialize_field("entries", &entries)?;
27 state.end()
28 }
29}
30
31impl<'de, N> Deserialize<'de> for ZeroSpVec<N>
32where
33 N: Num + Deserialize<'de> + Copy,
34{
35 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
36 where D: Deserializer<'de> {
37 #[derive(Deserialize)]
39 struct ZeroSpVecData<N> {
40 len: usize,
41 nnz: usize,
42 entries: Vec<(usize, N)>,
43 }
44
45 let data = ZeroSpVecData::deserialize(deserializer)?;
46
47 let mut vec = ZeroSpVec::with_capacity(data.nnz);
49 vec.len = data.len;
50 vec.nnz = data.nnz;
51 for (index, value) in data.entries {
53 vec.raw_push(index, value);
54 }
55 Ok(vec)
56 }
57}