Skip to main content

object_rainbow_point/
point_serialize.rs

1use 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}