@@ -2898,6 +2898,7 @@ mod flatten {
28982898 #[ derive( Debug , PartialEq , Serialize , Deserialize ) ]
28992899 #[ serde( tag = "tag" , content = "content" ) ]
29002900 enum Enum {
2901+ Unit ,
29012902 Newtype ( NewtypeVariant ) ,
29022903 Struct { index : u32 , value : u32 } ,
29032904 }
@@ -2907,6 +2908,170 @@ mod flatten {
29072908 value : u32 ,
29082909 }
29092910
2911+ #[ test]
2912+ fn unit ( ) {
2913+ let value = Flatten {
2914+ outer : 42 ,
2915+ data : NewtypeWrapper ( Enum :: Unit ) ,
2916+ } ;
2917+ // Field order: outer, [tag]
2918+ assert_tokens (
2919+ & value,
2920+ & [
2921+ Token :: Map { len : None } ,
2922+ // outer
2923+ Token :: Str ( "outer" ) ,
2924+ Token :: U32 ( 42 ) ,
2925+ // tag
2926+ Token :: Str ( "tag" ) ,
2927+ Token :: UnitVariant {
2928+ name : "Enum" ,
2929+ variant : "Unit" ,
2930+ } ,
2931+ // content missing
2932+ Token :: MapEnd ,
2933+ ] ,
2934+ ) ;
2935+ // Field order: [tag], outer
2936+ assert_de_tokens (
2937+ & value,
2938+ & [
2939+ Token :: Map { len : None } ,
2940+ // tag
2941+ Token :: Str ( "tag" ) ,
2942+ Token :: UnitVariant {
2943+ name : "Enum" ,
2944+ variant : "Unit" ,
2945+ } ,
2946+ // content missing
2947+ // outer
2948+ Token :: Str ( "outer" ) ,
2949+ Token :: U32 ( 42 ) ,
2950+ Token :: MapEnd ,
2951+ ] ,
2952+ ) ;
2953+ // Field order: outer, [tag, content]
2954+ assert_de_tokens (
2955+ & value,
2956+ & [
2957+ Token :: Map { len : None } ,
2958+ // outer
2959+ Token :: Str ( "outer" ) ,
2960+ Token :: U32 ( 42 ) ,
2961+ // tag
2962+ Token :: Str ( "tag" ) ,
2963+ Token :: UnitVariant {
2964+ name : "Enum" ,
2965+ variant : "Unit" ,
2966+ } ,
2967+ // content
2968+ Token :: Str ( "content" ) ,
2969+ Token :: Unit ,
2970+ Token :: MapEnd ,
2971+ ] ,
2972+ ) ;
2973+ // Field order: outer, [content, tag]
2974+ assert_de_tokens (
2975+ & value,
2976+ & [
2977+ Token :: Map { len : None } ,
2978+ // outer
2979+ Token :: Str ( "outer" ) ,
2980+ Token :: U32 ( 42 ) ,
2981+ // content
2982+ Token :: Str ( "content" ) ,
2983+ Token :: Unit ,
2984+ // tag
2985+ Token :: Str ( "tag" ) ,
2986+ Token :: UnitVariant {
2987+ name : "Enum" ,
2988+ variant : "Unit" ,
2989+ } ,
2990+ Token :: MapEnd ,
2991+ ] ,
2992+ ) ;
2993+ // Field order: [tag, content], outer
2994+ assert_de_tokens (
2995+ & value,
2996+ & [
2997+ Token :: Map { len : None } ,
2998+ // tag
2999+ Token :: Str ( "tag" ) ,
3000+ Token :: UnitVariant {
3001+ name : "Enum" ,
3002+ variant : "Unit" ,
3003+ } ,
3004+ // content
3005+ Token :: Str ( "content" ) ,
3006+ Token :: Unit ,
3007+ // outer
3008+ Token :: Str ( "outer" ) ,
3009+ Token :: U32 ( 42 ) ,
3010+ Token :: MapEnd ,
3011+ ] ,
3012+ ) ;
3013+ // Field order: [content, tag], outer - did not work
3014+ assert_de_tokens (
3015+ & value,
3016+ & [
3017+ Token :: Map { len : None } ,
3018+ // content
3019+ Token :: Str ( "content" ) ,
3020+ Token :: Unit ,
3021+ // tag
3022+ Token :: Str ( "tag" ) ,
3023+ Token :: UnitVariant {
3024+ name : "Enum" ,
3025+ variant : "Unit" ,
3026+ } ,
3027+ // outer
3028+ Token :: Str ( "outer" ) ,
3029+ Token :: U32 ( 42 ) ,
3030+ Token :: MapEnd ,
3031+ ] ,
3032+ ) ;
3033+ // Field order: [tag], outer, [content]
3034+ assert_de_tokens (
3035+ & value,
3036+ & [
3037+ Token :: Map { len : None } ,
3038+ // tag
3039+ Token :: Str ( "tag" ) ,
3040+ Token :: UnitVariant {
3041+ name : "Enum" ,
3042+ variant : "Unit" ,
3043+ } ,
3044+ // outer
3045+ Token :: Str ( "outer" ) ,
3046+ Token :: U32 ( 42 ) ,
3047+ // content
3048+ Token :: Str ( "content" ) ,
3049+ Token :: Unit ,
3050+ Token :: MapEnd ,
3051+ ] ,
3052+ ) ;
3053+ // Field order: [content], outer, [tag] - did not work
3054+ assert_de_tokens (
3055+ & value,
3056+ & [
3057+ Token :: Map { len : None } ,
3058+ // content
3059+ Token :: Str ( "content" ) ,
3060+ Token :: Unit ,
3061+ // outer
3062+ Token :: Str ( "outer" ) ,
3063+ Token :: U32 ( 42 ) ,
3064+ // tag
3065+ Token :: Str ( "tag" ) ,
3066+ Token :: UnitVariant {
3067+ name : "Enum" ,
3068+ variant : "Unit" ,
3069+ } ,
3070+ Token :: MapEnd ,
3071+ ] ,
3072+ ) ;
3073+ }
3074+
29103075 #[ test]
29113076 fn newtype ( ) {
29123077 let value = Flatten {
0 commit comments