| 316 | V: Clone + PartialEq + Serialize, |
| 317 | { |
| 318 | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> |
| 319 | where |
| 320 | S: Serializer, |
| 321 | { |
| 322 | // TODO: bincode encodes option as "byte for Some/None" and then optionally the content |
| 323 | // TODO: we can actually optimize it by encoding manually bitmask, then elements |
| 324 | let mut elems_cnt = self.elems.len(); |
| 325 | while elems_cnt > 0 && self.elems[elems_cnt - 1] == self.default { |
| 326 | elems_cnt -= 1; |
| 327 | } |
| 328 | let mut seq = serializer.serialize_seq(Some(1 + elems_cnt))?; |
| 329 | seq.serialize_element(&Some(self.default.clone()))?; |
| 330 | for e in self.elems.iter().take(elems_cnt) { |
| 331 | let some_e = Some(e); |
| 332 | seq.serialize_element(if *e == self.default { &None } else { &some_e })?; |
| 333 | } |
| 334 | seq.end() |
| 335 | } |
| 336 | } |
| 337 | |
| 338 | #[cfg(feature = "enable-serde")] |