1
use crate::ast::DeclarationPtr;
2
use crate::ast::serde::AsId;
3
use serde::{Deserialize, Deserializer, Serialize, Serializer};
4
use serde_with::{DeserializeAs, SerializeAs};
5

            
6
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7
pub struct ReprStateSerde;
8

            
9
impl<T> SerializeAs<T> for ReprStateSerde
10
where
11
    T: Serialize,
12
{
13
    fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
14
    where
15
        S: Serializer,
16
    {
17
        source.serialize(serializer)
18
    }
19
}
20

            
21
impl<'de, T> DeserializeAs<'de, T> for ReprStateSerde
22
where
23
    T: Deserialize<'de>,
24
{
25
    fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
26
    where
27
        D: Deserializer<'de>,
28
    {
29
        T::deserialize(deserializer)
30
    }
31
}
32

            
33
impl SerializeAs<DeclarationPtr> for ReprStateSerde {
34
    fn serialize_as<S>(source: &DeclarationPtr, serializer: S) -> Result<S::Ok, S::Error>
35
    where
36
        S: Serializer,
37
    {
38
        AsId::serialize_as(source, serializer)
39
    }
40
}
41

            
42
impl<'de> DeserializeAs<'de, DeclarationPtr> for ReprStateSerde {
43
    fn deserialize_as<D>(deserializer: D) -> Result<DeclarationPtr, D::Error>
44
    where
45
        D: Deserializer<'de>,
46
    {
47
        AsId::deserialize_as(deserializer)
48
    }
49
}