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}