@@ -178,7 +178,7 @@ impl<'a, 'b: 'a> ser::Serializer for &'a mut Serializer<'b> {
178
178
type Error = Error ;
179
179
type SerializeSeq = SerializeSeq < ' a , ' b > ;
180
180
type SerializeTuple = SerializeSeq < ' a , ' b > ;
181
- type SerializeTupleStruct = Unreachable ;
181
+ type SerializeTupleStruct = SerializeSeq < ' a , ' b > ;
182
182
type SerializeTupleVariant = Unreachable ;
183
183
type SerializeMap = SerializeMap < ' a , ' b > ;
184
184
type SerializeStruct = SerializeStruct < ' a , ' b > ;
@@ -385,9 +385,9 @@ impl<'a, 'b: 'a> ser::Serializer for &'a mut Serializer<'b> {
385
385
fn serialize_tuple_struct (
386
386
self ,
387
387
_name : & ' static str ,
388
- _len : usize ,
388
+ len : usize ,
389
389
) -> Result < Self :: SerializeTupleStruct > {
390
- unreachable ! ( )
390
+ self . serialize_seq ( Some ( len ) )
391
391
}
392
392
393
393
fn serialize_tuple_variant (
@@ -822,6 +822,32 @@ mod tests {
822
822
) ;
823
823
}
824
824
825
+ #[ test]
826
+ fn test_tuple_struct ( ) {
827
+ #[ derive( Serialize ) ]
828
+ struct A < ' a > ( u32 , Option < & ' a str > , u16 , bool ) ;
829
+
830
+ let a = A ( 42 , Some ( "A string" ) , 720 , false ) ;
831
+
832
+ assert_eq ! (
833
+ & * crate :: to_string:: <_, N >( & a) . unwrap( ) ,
834
+ r#"[42,"A string",720,false]"#
835
+ ) ;
836
+ }
837
+
838
+ #[ test]
839
+ fn test_tuple_struct_roundtrip ( ) {
840
+ use serde_derive:: Deserialize ;
841
+
842
+ #[ derive( Debug , Deserialize , Serialize , PartialEq , Eq ) ]
843
+ struct A < ' a > ( u32 , Option < & ' a str > , u16 , bool ) ;
844
+
845
+ let a1 = A ( 42 , Some ( "A string" ) , 720 , false ) ;
846
+ let serialized = crate :: to_string :: < _ , N > ( & a1) . unwrap ( ) ;
847
+ let ( a2, _size) : ( A < ' _ > , usize ) = crate :: from_str ( & serialized) . unwrap ( ) ;
848
+ assert_eq ! ( a1, a2) ;
849
+ }
850
+
825
851
#[ test]
826
852
fn test_serialize_bytes ( ) {
827
853
use core:: fmt:: Write ;
0 commit comments