@@ -12,6 +12,8 @@ pub mod hash;
1212pub mod ord;
1313pub mod partial_eq;
1414pub mod partial_ord;
15+ #[ cfg( feature = "serde" ) ]
16+ pub mod serialize;
1517#[ cfg( feature = "zeroize" ) ]
1618pub mod zeroize;
1719#[ cfg( feature = "zeroize" ) ]
@@ -56,6 +58,9 @@ pub enum Trait {
5658 PartialEq ,
5759 /// [`PartialOrd`].
5860 PartialOrd ,
61+ /// [`Serialize`](https://docs.rs/serde/latest/serde/derive.Serialize.html).
62+ #[ cfg( feature = "serde" ) ]
63+ Serialize ,
5964 /// [`Zeroize`](https://docs.rs/zeroize/latest/zeroize/trait.Zeroize.html).
6065 #[ cfg( feature = "zeroize" ) ]
6166 Zeroize ,
@@ -78,6 +83,8 @@ macro_rules! trait_dispatch {
7883 Trait :: Ord => ord:: Ord :: $method( $( $par) ,* ) ,
7984 Trait :: PartialEq => partial_eq:: PartialEq :: $method( $( $par) ,* ) ,
8085 Trait :: PartialOrd => partial_ord:: PartialOrd :: $method( $( $par) ,* ) ,
86+ #[ cfg( feature = "serde" ) ]
87+ Trait :: Serialize => serialize:: Serialize :: $method( $( $par) ,* ) ,
8188 #[ cfg( feature = "zeroize" ) ]
8289 Trait :: Zeroize => zeroize:: Zeroize :: $method( $( $par) ,* ) ,
8390 #[ cfg( feature = "zeroize" ) ]
@@ -99,15 +106,25 @@ impl Trait {
99106 "Default" => Ok ( Default ) ,
100107 #[ cfg( feature = "serde" ) ]
101108 "Deserialize" => Ok ( Deserialize ) ,
109+ #[ cfg( not( feature = "serde" ) ) ]
110+ "Deserialize" => Err ( Error :: serde_feature ( path. span ( ) ) ) ,
102111 "Eq" => Ok ( Eq ) ,
103112 "Hash" => Ok ( Hash ) ,
104113 "Ord" => Ok ( Ord ) ,
105114 "PartialEq" => Ok ( PartialEq ) ,
106115 "PartialOrd" => Ok ( PartialOrd ) ,
116+ #[ cfg( feature = "serde" ) ]
117+ "Serialize" => Ok ( Serialize ) ,
118+ #[ cfg( not( feature = "serde" ) ) ]
119+ "Serialize" => Err ( Error :: serde_feature ( path. span ( ) ) ) ,
107120 #[ cfg( feature = "zeroize" ) ]
108121 "Zeroize" => Ok ( Zeroize ) ,
122+ #[ cfg( not( feature = "zeroize" ) ) ]
123+ "Zeroize" => Err ( Error :: zeroize_feature ( path. span ( ) ) ) ,
109124 #[ cfg( feature = "zeroize" ) ]
110125 "ZeroizeOnDrop" => Ok ( ZeroizeOnDrop ) ,
126+ #[ cfg( not( feature = "zeroize" ) ) ]
127+ "ZeroizeOnDrop" => Err ( Error :: zeroize_feature ( path. span ( ) ) ) ,
111128 "crate" => Err ( Error :: crate_ ( path. span ( ) ) ) ,
112129 _ => Err ( Error :: trait_ ( path. span ( ) ) ) ,
113130 }
@@ -170,6 +187,9 @@ pub enum DeriveTrait {
170187 PartialEq ,
171188 /// [`PartialOrd`].
172189 PartialOrd ,
190+ /// [`Serialize`](https://docs.rs/serde/latest/serde/derive.Serialize.html).
191+ #[ cfg( feature = "serde" ) ]
192+ Serialize ( serialize:: Serialize ) ,
173193 /// [`Zeroize`](https://docs.rs/zeroize/latest/zeroize/trait.Zeroize.html).
174194 #[ cfg( feature = "zeroize" ) ]
175195 Zeroize ( zeroize:: Zeroize ) ,
@@ -196,6 +216,8 @@ impl Deref for DeriveTrait {
196216 Ord => & ord:: Ord ,
197217 PartialEq => & partial_eq:: PartialEq ,
198218 PartialOrd => & partial_ord:: PartialOrd ,
219+ #[ cfg( feature = "serde" ) ]
220+ Serialize ( trait_) => trait_,
199221 #[ cfg( feature = "zeroize" ) ]
200222 Zeroize ( trait_) => trait_,
201223 #[ cfg( feature = "zeroize" ) ]
0 commit comments