object_rainbow_point/
point_serialize.rs1use serde::Serialize;
2
3use crate::Point;
4
5impl<T: Serialize + Clone> Serialize for Point<T> {
6 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
7 where
8 S: serde::Serializer,
9 {
10 if let Some(object) = self.get() {
11 return object.serialize(serializer);
12 }
13 if let Some((object, _)) = self
14 .try_fetch_local()
15 .map_err(<S::Error as serde::ser::Error>::custom)?
16 {
17 return object.serialize(serializer);
18 }
19 Err(<S::Error as serde::ser::Error>::custom(
20 "cannot serialize remote Point",
21 ))
22 }
23}