color_span/view/
ser.rs

1use std::collections::BTreeSet;
2
3use serde::{ser::SerializeStruct, Serialize, Serializer};
4
5use crate::ColorView;
6
7impl Serialize for ColorView {
8    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
9    where
10        S: Serializer,
11    {
12        let set = BTreeSet::from_iter(self.into_iter().map(|v| v.color));
13        let set = Vec::from_iter(set.into_iter());
14        let bits: Vec<u8> = self
15            .span
16            .get_info()
17            .iter()
18            .map(|v| set.binary_search(&v.clone().unwrap_or_default()))
19            .map(|v| v.unwrap_or_default() as u8)
20            .collect();
21        let mut ser = serializer.serialize_struct("ColorView", 3)?;
22        ser.serialize_field("text", &self.text())?;
23        ser.serialize_field("colors", &set)?;
24        ser.serialize_field("bits", &bits)?;
25        ser.end()
26    }
27}