aldrin_core/adapters/
primary.rs1use crate::tags::{KeyTag, KeyTagImpl, PrimaryKeyTag, PrimaryTag};
2use crate::{
3 Deserialize, DeserializeError, DeserializeKey, DeserializePrimary, Deserializer, Serialize,
4 SerializeError, SerializeKey, SerializePrimary, Serializer,
5};
6
7#[derive(Debug)]
8pub struct AsPrimary<T>(pub T);
9
10impl<T: PrimaryTag> PrimaryTag for AsPrimary<T> {
11 type Tag = T::Tag;
12}
13
14impl<T: SerializePrimary> Serialize<T::Tag> for AsPrimary<T> {
15 fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
16 serializer.serialize(self.0)
17 }
18}
19
20impl<'a, T> Serialize<T::Tag> for &'a AsPrimary<T>
21where
22 T: PrimaryTag,
23 &'a T: Serialize<T::Tag>,
24{
25 fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
26 serializer.serialize(&self.0)
27 }
28}
29
30impl<T: DeserializePrimary> Deserialize<T::Tag> for AsPrimary<T> {
31 fn deserialize(deserializer: Deserializer) -> Result<Self, DeserializeError> {
32 deserializer.deserialize().map(Self)
33 }
34}
35
36impl<T: PrimaryKeyTag> PrimaryKeyTag for AsPrimary<T> {
37 type KeyTag = T::KeyTag;
38}
39
40impl<T: PrimaryKeyTag + SerializeKey<T::KeyTag>> SerializeKey<T::KeyTag> for AsPrimary<T> {
41 fn try_as_key(
42 &self,
43 ) -> Result<<<T::KeyTag as KeyTag>::Impl as KeyTagImpl>::Key<'_>, SerializeError> {
44 self.0.try_as_key()
45 }
46}
47
48impl<T: PrimaryKeyTag + DeserializeKey<T::KeyTag>> DeserializeKey<T::KeyTag> for AsPrimary<T> {
49 fn try_from_key(
50 key: <<T::KeyTag as KeyTag>::Impl as KeyTagImpl>::Key<'_>,
51 ) -> Result<Self, DeserializeError> {
52 T::try_from_key(key).map(Self)
53 }
54}