@@ -93,7 +93,7 @@ macro_rules! impl_serde_for_symbol {
9393 & self ,
9494 serializer: T ,
9595 ) -> :: core:: result:: Result <T :: Ok , T :: Error > {
96- self . value . serialize( serializer)
96+ self . to_usize ( ) . serialize( serializer)
9797 }
9898 }
9999
@@ -119,3 +119,74 @@ macro_rules! impl_serde_for_symbol {
119119impl_serde_for_symbol ! ( SymbolU16 , u16 ) ;
120120impl_serde_for_symbol ! ( SymbolU32 , u32 ) ;
121121impl_serde_for_symbol ! ( SymbolUsize , usize ) ;
122+
123+ #[ cfg( test) ]
124+ mod tests {
125+ use crate :: {
126+ symbol:: { SymbolU16 , SymbolU32 , SymbolUsize } ,
127+ Symbol ,
128+ } ;
129+ use serde_json;
130+
131+ fn symbol_round_trip_serializes < S > ( symbol : S ) -> bool
132+ where
133+ S : Symbol + std:: fmt:: Debug + serde:: Serialize + serde:: de:: DeserializeOwned + PartialEq ,
134+ {
135+ let serialized = serde_json:: to_string ( & symbol) . expect ( "serialization should succeed" ) ;
136+ let deserialized: S =
137+ serde_json:: from_str ( & serialized) . expect ( "deserialization should succeed" ) ;
138+ symbol == deserialized
139+ }
140+
141+ #[ test]
142+ fn symbol_u16_round_trips ( ) {
143+ assert ! ( symbol_round_trip_serializes(
144+ SymbolU16 :: try_from_usize( 0 ) . unwrap( )
145+ ) ) ;
146+ assert ! ( symbol_round_trip_serializes(
147+ SymbolU16 :: try_from_usize( 42 ) . unwrap( )
148+ ) ) ;
149+ assert ! ( symbol_round_trip_serializes(
150+ SymbolU16 :: try_from_usize( u16 :: MAX as usize - 1 ) . unwrap( )
151+ ) ) ;
152+ }
153+
154+ #[ test]
155+ fn symbol_u32_round_trips ( ) {
156+ assert ! ( symbol_round_trip_serializes(
157+ SymbolU32 :: try_from_usize( 0 ) . unwrap( )
158+ ) ) ;
159+ assert ! ( symbol_round_trip_serializes(
160+ SymbolU32 :: try_from_usize( 42 ) . unwrap( )
161+ ) ) ;
162+ assert ! ( symbol_round_trip_serializes(
163+ SymbolU32 :: try_from_usize( u32 :: MAX as usize - 1 ) . unwrap( )
164+ ) ) ;
165+ }
166+
167+ #[ test]
168+ fn symbol_usize_round_trips ( ) {
169+ assert ! ( symbol_round_trip_serializes(
170+ SymbolUsize :: try_from_usize( 0 ) . unwrap( )
171+ ) ) ;
172+ assert ! ( symbol_round_trip_serializes(
173+ SymbolUsize :: try_from_usize( 42 ) . unwrap( )
174+ ) ) ;
175+ assert ! ( symbol_round_trip_serializes(
176+ SymbolUsize :: try_from_usize( usize :: MAX as usize - 1 ) . unwrap( )
177+ ) ) ;
178+ }
179+
180+ #[ test]
181+ fn raw_usize_round_trips ( ) {
182+ assert ! ( symbol_round_trip_serializes(
183+ usize :: try_from_usize( 0 ) . unwrap( )
184+ ) ) ;
185+ assert ! ( symbol_round_trip_serializes(
186+ usize :: try_from_usize( 42 ) . unwrap( )
187+ ) ) ;
188+ assert ! ( symbol_round_trip_serializes(
189+ usize :: try_from_usize( usize :: MAX ) . unwrap( )
190+ ) ) ;
191+ }
192+ }
0 commit comments