aldrin_core/impls/
uuid.rs

1#[cfg(feature = "introspection")]
2use crate::introspection::{ir, Introspectable, LexicalId, References};
3use crate::tags::{self, PrimaryTag, Receiver, Sender, Tag};
4use crate::{
5    ChannelCookie, Deserialize, DeserializeError, Deserializer, Serialize, SerializeError,
6    Serializer,
7};
8use uuid::Uuid;
9
10impl PrimaryTag for Uuid {
11    type Tag = tags::Uuid;
12}
13
14impl Serialize<tags::Uuid> for Uuid {
15    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
16        serializer.serialize_uuid(self)
17    }
18}
19
20impl Serialize<tags::Uuid> for &Uuid {
21    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
22        serializer.serialize::<tags::Uuid>(*self)
23    }
24}
25
26impl Deserialize<tags::Uuid> for Uuid {
27    fn deserialize(deserializer: Deserializer) -> Result<Self, DeserializeError> {
28        deserializer.deserialize_uuid()
29    }
30}
31
32impl<T: Tag> Serialize<Sender<T>> for Uuid {
33    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
34        serializer.serialize_sender(ChannelCookie(self))
35    }
36}
37
38impl<T: Tag> Serialize<Sender<T>> for &Uuid {
39    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
40        serializer.serialize::<Sender<T>>(*self)
41    }
42}
43
44impl<T: Tag> Deserialize<Sender<T>> for Uuid {
45    fn deserialize(deserializer: Deserializer) -> Result<Self, DeserializeError> {
46        deserializer.deserialize_sender().map(|cookie| cookie.0)
47    }
48}
49
50impl<T: Tag> Serialize<Receiver<T>> for Uuid {
51    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
52        serializer.serialize_receiver(ChannelCookie(self))
53    }
54}
55
56impl<T: Tag> Serialize<Receiver<T>> for &Uuid {
57    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
58        serializer.serialize::<Receiver<T>>(*self)
59    }
60}
61
62impl<T: Tag> Deserialize<Receiver<T>> for Uuid {
63    fn deserialize(deserializer: Deserializer) -> Result<Self, DeserializeError> {
64        deserializer.deserialize_receiver().map(|cookie| cookie.0)
65    }
66}
67
68#[cfg(feature = "introspection")]
69impl Introspectable for Uuid {
70    fn layout() -> ir::LayoutIr {
71        ir::BuiltInTypeIr::Uuid.into()
72    }
73
74    fn lexical_id() -> LexicalId {
75        LexicalId::UUID
76    }
77
78    fn add_references(_references: &mut References) {}
79}