@@ -119,22 +119,15 @@ impl serialize::Encoder for Encoder {
119
119
f ( )
120
120
}
121
121
122
- fn emit_enum_variant ( & self , name : & str , _id : uint , _cnt : uint , f : & fn ( ) ) {
122
+ fn emit_enum_variant ( & self , name : & str , _id : uint , cnt : uint , f : & fn ( ) ) {
123
123
// encoding of enums is special-cased for Option. Specifically:
124
124
// Some(34) => 34
125
125
// None => null
126
126
127
- // other enums are encoded as vectors:
127
+ // other enums are encoded as strings or vectors:
128
+ // Bunny => "Bunny"
128
129
// Kangaroo(34,"William") => ["Kangaroo",[34,"William"]]
129
130
130
- // the default expansion for enums is more verbose than I'd like;
131
- // specifically, the inner pair of brackets seems superfluous,
132
- // BUT the design of the enumeration framework and the requirements
133
- // of the special-case for Option mean that a first argument must
134
- // be encoded "naked"--with no commas--and that the option name
135
- // can't be followed by just a comma, because there might not
136
- // be any elements in the tuple.
137
-
138
131
// FIXME #4872: this would be more precise and less frightening
139
132
// with fully-qualified option names. To get that information,
140
133
// we'd have to change the expansion of auto-encode to pass
@@ -144,14 +137,14 @@ impl serialize::Encoder for Encoder {
144
137
f ( ) ;
145
138
} else if name == ~"None " {
146
139
self . wr . write_str ( ~"null") ;
140
+ } else if cnt == 0 {
141
+ self . wr . write_str ( escape_str ( name) ) ;
147
142
} else {
148
143
self . wr . write_char ( '[' ) ;
149
144
self . wr . write_str ( escape_str ( name) ) ;
150
145
self . wr . write_char ( ',' ) ;
151
- self . wr . write_char ( '[' ) ;
152
146
f ( ) ;
153
147
self . wr . write_char ( ']' ) ;
154
- self . wr . write_char ( ']' ) ;
155
148
}
156
149
}
157
150
@@ -256,28 +249,19 @@ impl serialize::Encoder for PrettyEncoder {
256
249
f ( ) ;
257
250
} else if name == ~"None " {
258
251
self . emit_nil ( ) ;
252
+ } else if cnt == 0 {
253
+ self . wr . write_str ( escape_str ( name) ) ;
259
254
} else {
260
255
self . wr . write_char ( '[' ) ;
261
256
self . indent += 2 ;
262
257
self . wr . write_char ( '\n' ) ;
263
258
self . wr . write_str ( spaces ( self . indent ) ) ;
264
259
self . wr . write_str ( escape_str ( name) ) ;
265
- if cnt == 0 {
266
- self . wr . write_str ( ",\n " ) ;
267
- self . wr . write_str ( spaces ( self . indent ) ) ;
268
- self . wr . write_str ( "[]\n " ) ;
269
- } else {
270
- self . wr . write_str ( ",\n " ) ;
271
- self . wr . write_str ( spaces ( self . indent ) ) ;
272
- self . wr . write_str ( "[\n " ) ;
273
- self . indent += 2 ;
274
- f ( ) ;
275
- self . wr . write_char ( '\n' ) ;
276
- self . indent -= 2 ;
277
- self . wr . write_str ( spaces ( self . indent ) ) ;
278
- self . wr . write_str ( "]\n " ) ;
279
- }
260
+ self . wr . write_str ( ",\n " ) ;
261
+ f ( ) ;
262
+ self . wr . write_char ( '\n' ) ;
280
263
self . indent -= 2 ;
264
+ self . wr . write_str ( spaces ( self . indent ) ) ;
281
265
self . wr . write_char ( ']' ) ;
282
266
}
283
267
}
@@ -1406,7 +1390,7 @@ mod tests {
1406
1390
let encoder = Encoder(wr);
1407
1391
animal.encode(&encoder);
1408
1392
};
1409
- assert_eq!(s, ~" [ \" Dog \" , [ ] ] ");
1393
+ assert_eq!(s, ~"\" Dog\" " ) ;
1410
1394
}
1411
1395
1412
1396
#[ test]
@@ -1417,14 +1401,7 @@ mod tests {
1417
1401
let encoder = PrettyEncoder ( wr) ;
1418
1402
animal. encode( & encoder) ;
1419
1403
} ;
1420
- assert_eq!(
1421
- s,
1422
- ~"\
1423
- [\n \
1424
- \" Dog\" ,\n \
1425
- []\n \
1426
- ]"
1427
- ) ;
1404
+ assert_eq!( s, ~"\" Dog \" ") ;
1428
1405
}
1429
1406
1430
1407
#[ test]
@@ -1435,7 +1412,7 @@ mod tests {
1435
1412
let encoder = Encoder(wr);
1436
1413
animal.encode(&encoder);
1437
1414
};
1438
- assert_eq!(s, ~" [ \" Frog \" , [ \" Henry \" , 349 ] ] ");
1415
+ assert_eq!(s, ~" [ \" Frog \" , \" Henry \" , 349 ] ");
1439
1416
}
1440
1417
1441
1418
#[test]
@@ -1451,10 +1428,8 @@ mod tests {
1451
1428
~"\
1452
1429
[\n \
1453
1430
\" Frog\" ,\n \
1454
- [\n \
1455
- \" Henry\" ,\n \
1456
- 349\n \
1457
- ]\n \
1431
+ \" Henry\" ,\n \
1432
+ 349\n \
1458
1433
]"
1459
1434
) ;
1460
1435
}
0 commit comments