serde_attributes/rename/
mod.rs1use 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}