@@ -770,4 +770,126 @@ mod tests {
770770 assert_eq ! ( s, expected) ;
771771 Ok ( ( ) )
772772 }
773+
774+ #[ test]
775+ fn test_deserialize_some_struct ( ) -> Result < ( ) > {
776+ #[ derive( Debug , PartialEq , Deserialize ) ]
777+ struct S {
778+ inner : i32 ,
779+ }
780+
781+ let input = "d5:inneri32ee" ;
782+ let s: Option < S > = from_slice ( input. as_bytes ( ) ) ?;
783+ let expected = Some ( S { inner : 32 } ) ;
784+ assert_eq ! ( s, expected) ;
785+ Ok ( ( ) )
786+ }
787+
788+ #[ test]
789+ fn test_deserialize_none_struct ( ) -> Result < ( ) > {
790+ #[ derive( Debug , PartialEq , Deserialize ) ]
791+ struct S {
792+ inner : i32 ,
793+ }
794+
795+ let input = "de" ;
796+ // let s: Option<S> = from_slice(input.as_bytes());
797+ let s: Result < Option < S > > = from_slice ( input. as_bytes ( ) ) ;
798+ println ! ( "{:?}" , s) ;
799+ let s = s. unwrap ( ) ;
800+ let expected = None ;
801+ assert_eq ! ( s, expected) ;
802+ Ok ( ( ) )
803+ }
804+
805+ #[ test]
806+ fn test_deserialize_struct_some ( ) -> Result < ( ) > {
807+ #[ derive( Debug , PartialEq , Deserialize ) ]
808+ struct S {
809+ inner : Option < i32 > ,
810+ }
811+
812+ let input = "d5:inneri32ee" ;
813+ let s: S = from_slice ( input. as_bytes ( ) ) ?;
814+ let expected = S { inner : Some ( 32 ) } ;
815+ assert_eq ! ( s, expected) ;
816+ Ok ( ( ) )
817+ }
818+
819+ #[ test]
820+ fn test_deserialize_struct_none_dict ( ) -> Result < ( ) > {
821+ #[ derive( Debug , PartialEq , Deserialize ) ]
822+ struct S {
823+ inner : Option < i32 > ,
824+ }
825+
826+ let input = "de" ;
827+ let s: S = from_slice ( input. as_bytes ( ) ) ?;
828+ let expected = S { inner : None } ;
829+ assert_eq ! ( s, expected) ;
830+ Ok ( ( ) )
831+ }
832+
833+ #[ test]
834+ fn test_deserialize_struct_some_none ( ) -> Result < ( ) > {
835+ #[ derive( Debug , PartialEq , Deserialize ) ]
836+ struct S {
837+ inner : Option < T > ,
838+ }
839+
840+ #[ derive( Debug , PartialEq , Deserialize ) ]
841+ struct T {
842+ innermost : Option < i32 > ,
843+ }
844+
845+ let input = "d5:innerdee" ;
846+ let s: S = from_slice ( input. as_bytes ( ) ) ?;
847+ let expected = S {
848+ inner : Some ( T { innermost : None } ) ,
849+ } ;
850+ assert_eq ! ( s, expected) ;
851+ Ok ( ( ) )
852+ }
853+
854+ #[ test]
855+ fn test_deserialize_struct_some_some ( ) -> Result < ( ) > {
856+ #[ derive( Debug , PartialEq , Deserialize ) ]
857+ struct S {
858+ inner : Option < T > ,
859+ }
860+
861+ #[ derive( Debug , PartialEq , Deserialize ) ]
862+ struct T {
863+ innermost : Option < i32 > ,
864+ }
865+
866+ let input = "d5:innerd9:innermosti32eee" ;
867+ let s: S = from_slice ( input. as_bytes ( ) ) ?;
868+ let expected = S {
869+ inner : Some ( T {
870+ innermost : Some ( 32 ) ,
871+ } ) ,
872+ } ;
873+ assert_eq ! ( s, expected) ;
874+ Ok ( ( ) )
875+ }
876+
877+ #[ test]
878+ fn test_deserialize_inner_none ( ) -> Result < ( ) > {
879+ #[ derive( Debug , PartialEq , Deserialize ) ]
880+ struct S {
881+ inner : Option < T > ,
882+ }
883+
884+ #[ derive( Debug , PartialEq , Deserialize ) ]
885+ struct T {
886+ innermost : Option < i32 > ,
887+ }
888+
889+ let input = "de" ;
890+ let s: S = from_slice ( input. as_bytes ( ) ) ?;
891+ let expected = S { inner : None } ;
892+ assert_eq ! ( s, expected) ;
893+ Ok ( ( ) )
894+ }
773895}
0 commit comments