serde_attributes/rename/
mod.rs

1//! [Official doc](https://serde.rs/container-attrs.html#rename)
2
3use alloc::string::String;
4
5#[cfg(feature = "with-darling")]
6pub mod darling;
7#[cfg(feature = "with-syn")]
8pub mod syn;
9
10#[derive(PartialEq, Eq, Hash, Debug, Clone)]
11pub enum Rename {
12    Normal(String),
13    Independent(RenameIndependent),
14}
15#[derive(PartialEq, Eq, Hash, Debug, Clone)]
16pub enum RenameIndependent {
17    Serialize(String),
18    Deserialize(String),
19    Both {
20        serialize: String,
21        deserialize: String,
22    },
23}
24impl Rename {
25    pub fn ser_name(&self) -> Option<&str> {
26        match self {
27            Self::Normal(name)
28            | Self::Independent(RenameIndependent::Serialize(name))
29            | Self::Independent(RenameIndependent::Both {
30                serialize: name,
31                deserialize: _,
32            }) => Some(name),
33            _ => None,
34        }
35    }
36
37    pub fn de_name(&self) -> Option<&str> {
38        match self {
39            Self::Normal(name)
40            | Self::Independent(RenameIndependent::Deserialize(name))
41            | Self::Independent(RenameIndependent::Both {
42                serialize: _,
43                deserialize: name,
44            }) => Some(name),
45            _ => None,
46        }
47    }
48}
49
50#[cfg(test)]
51mod tests {
52    use super::*;
53
54    #[test]
55    fn test_ser_name_and_de_name() {
56        assert_eq!(Rename::Normal("foo".into()).ser_name(), Some("foo"));
57        assert_eq!(Rename::Normal("foo".into()).de_name(), Some("foo"));
58
59        assert_eq!(
60            Rename::Independent(RenameIndependent::Serialize("ser".into())).ser_name(),
61            Some("ser")
62        );
63        assert_eq!(
64            Rename::Independent(RenameIndependent::Serialize("ser".into())).de_name(),
65            None
66        );
67
68        assert_eq!(
69            Rename::Independent(RenameIndependent::Deserialize("de".into())).ser_name(),
70            None
71        );
72        assert_eq!(
73            Rename::Independent(RenameIndependent::Deserialize("de".into())).de_name(),
74            Some("de")
75        );
76
77        assert_eq!(
78            Rename::Independent(RenameIndependent::Both {
79                serialize: "ser".into(),
80                deserialize: "de".into(),
81            })
82            .ser_name(),
83            Some("ser")
84        );
85        assert_eq!(
86            Rename::Independent(RenameIndependent::Both {
87                serialize: "ser".into(),
88                deserialize: "de".into(),
89            })
90            .de_name(),
91            Some("de")
92        );
93    }
94}