@@ -26,6 +26,10 @@ impl Serialize for ShortU16 {
2626 where
2727 S : Serializer ,
2828 {
29+ if serializer. is_human_readable ( ) {
30+ return serializer. serialize_u16 ( self . 0 ) ;
31+ }
32+
2933 // Pass a non-zero value to serialize_tuple() so that serde_json will
3034 // generate an open bracket.
3135 let mut seq = serializer. serialize_tuple ( 1 ) ?;
@@ -155,7 +159,11 @@ impl<'de> Deserialize<'de> for ShortU16 {
155159 where
156160 D : Deserializer < ' de > ,
157161 {
158- deserializer. deserialize_tuple ( 3 , ShortU16Visitor )
162+ if deserializer. is_human_readable ( ) {
163+ Ok ( ShortU16 ( u16:: deserialize ( deserializer) ?) )
164+ } else {
165+ deserializer. deserialize_tuple ( 3 , ShortU16Visitor )
166+ }
159167 }
160168}
161169
@@ -168,6 +176,15 @@ pub fn serialize<S: Serializer, T: Serialize>(
168176 elements : & [ T ] ,
169177 serializer : S ,
170178) -> Result < S :: Ok , S :: Error > {
179+ if serializer. is_human_readable ( ) {
180+ use serde_core:: ser:: SerializeSeq ;
181+ let mut seq = serializer. serialize_seq ( Some ( elements. len ( ) ) ) ?;
182+ for element in elements {
183+ seq. serialize_element ( element) ?;
184+ }
185+ return seq. end ( ) ;
186+ }
187+
171188 // Pass a non-zero value to serialize_tuple() so that serde_json will
172189 // generate an open bracket.
173190 let mut seq = serializer. serialize_tuple ( 1 ) ?;
@@ -229,6 +246,9 @@ where
229246 D : Deserializer < ' de > ,
230247 T : Deserialize < ' de > ,
231248{
249+ if deserializer. is_human_readable ( ) {
250+ return <Vec < T > as Deserialize < ' de > >:: deserialize ( deserializer) ;
251+ }
232252 let visitor = ShortVecVisitor { _t : PhantomData } ;
233253 deserializer. deserialize_tuple ( usize:: MAX , visitor)
234254}
@@ -274,8 +294,43 @@ mod tests {
274294 super :: * ,
275295 assert_matches:: assert_matches,
276296 bincode:: { deserialize, serialize} ,
297+ std:: u16,
277298 } ;
278299
300+ #[ test]
301+ fn test_short_u16_human_readable_serialization ( ) {
302+ let value = ShortU16 ( 0u16 ) ;
303+ let string = serde_json:: to_string ( & value) . unwrap ( ) ;
304+ let expected_string = String :: from ( "0" ) ;
305+ assert_eq ! ( string, expected_string) ;
306+ let deser_value: ShortU16 = serde_json:: from_str ( & string) . unwrap ( ) ;
307+ assert_eq ! ( value. 0 , deser_value. 0 ) ;
308+
309+ let value = ShortU16 ( u16:: MAX ) ;
310+ let string = serde_json:: to_string ( & value) . unwrap ( ) ;
311+ let expected_string = String :: from ( "65535" ) ;
312+ assert_eq ! ( string, expected_string) ;
313+ let deser_value: ShortU16 = serde_json:: from_str ( & string) . unwrap ( ) ;
314+ assert_eq ! ( value. 0 , deser_value. 0 ) ;
315+ }
316+
317+ #[ test]
318+ fn test_short_vec_human_readable_serialization ( ) {
319+ let value = ShortVec :: < ( ) > ( vec ! [ ] ) ;
320+ let string = serde_json:: to_string ( & value) . unwrap ( ) ;
321+ let expected_string = String :: from ( "[]" ) ;
322+ assert_eq ! ( string, expected_string) ;
323+ let deser_value: ShortVec < ( ) > = serde_json:: from_str ( & string) . unwrap ( ) ;
324+ assert_eq ! ( value. 0 , deser_value. 0 ) ;
325+
326+ let value = ShortVec ( vec ! [ 1 , 2 , 3 ] ) ;
327+ let string = serde_json:: to_string ( & value) . unwrap ( ) ;
328+ let expected_string = String :: from ( "[1,2,3]" ) ;
329+ assert_eq ! ( string, expected_string) ;
330+ let deser_value: ShortVec < usize > = serde_json:: from_str ( & string) . unwrap ( ) ;
331+ assert_eq ! ( value. 0 , deser_value. 0 ) ;
332+ }
333+
279334 /// Return the serialized length.
280335 fn encode_len ( len : u16 ) -> Vec < u8 > {
281336 bincode:: serialize ( & ShortU16 ( len) ) . unwrap ( )
@@ -372,13 +427,6 @@ mod tests {
372427 assert_matches ! ( serialize( & vec) , Err ( _) ) ;
373428 }
374429
375- #[ test]
376- fn test_short_vec_json ( ) {
377- let vec = ShortVec ( vec ! [ 0 , 1 , 2 ] ) ;
378- let s = serde_json:: to_string ( & vec) . unwrap ( ) ;
379- assert_eq ! ( s, "[[3],0,1,2]" ) ;
380- }
381-
382430 #[ test]
383431 fn test_short_vec_aliased_length ( ) {
384432 let bytes = [
0 commit comments