@@ -3,6 +3,7 @@ extern crate serde;
3
3
4
4
use std:: collections:: { BTreeMap , HashSet } ;
5
5
use serde:: { Deserialize , Serialize , Deserializer } ;
6
+ use serde:: de:: Unexpected ;
6
7
7
8
use bson:: { Bson , Encoder , Decoder , DecoderError } ;
8
9
@@ -58,17 +59,16 @@ macro_rules! t {
58
59
}
59
60
60
61
macro_rules! encode( ( $t: expr) => ( {
61
- let mut e = Encoder :: new( ) ;
62
- t!( $t. serialize( & mut e) ) ;
63
- match e. bson( ) {
62
+ let e = Encoder :: new( ) ;
63
+ match $t. serialize( e) {
64
64
Ok ( b) => b,
65
65
Err ( e) => panic!( "Failed to serialize: {}" , e) ,
66
66
}
67
67
} ) ) ;
68
68
69
69
macro_rules! decode( ( $t: expr) => ( {
70
- let mut d = Decoder :: new( $t) ;
71
- t!( Deserialize :: deserialize( & mut d) )
70
+ let d = Decoder :: new( $t) ;
71
+ t!( Deserialize :: deserialize( d) )
72
72
} ) ) ;
73
73
74
74
#[ test]
@@ -118,24 +118,24 @@ fn application_decode_error() {
118
118
#[ derive( PartialEq , Debug ) ]
119
119
struct Range10 ( usize ) ;
120
120
impl Deserialize for Range10 {
121
- fn deserialize < D : Deserializer > ( d : & mut D ) -> Result < Range10 , D :: Error > {
121
+ fn deserialize < D : Deserializer > ( d : D ) -> Result < Range10 , D :: Error > {
122
122
let x: usize = try!( Deserialize :: deserialize ( d) ) ;
123
123
if x > 10 {
124
- Err ( serde:: de:: Error :: invalid_value ( "more than 10" ) )
124
+ Err ( serde:: de:: Error :: invalid_value ( Unexpected :: Unsigned ( x as u64 ) , & "more than 10" ) )
125
125
} else {
126
126
Ok ( Range10 ( x) )
127
127
}
128
128
}
129
129
}
130
- let mut d_good = Decoder :: new ( Bson :: I64 ( 5 ) ) ;
131
- let mut d_bad1 = Decoder :: new ( Bson :: String ( "not an isize" . to_string ( ) ) ) ;
132
- let mut d_bad2 = Decoder :: new ( Bson :: I64 ( 11 ) ) ;
130
+ let d_good = Decoder :: new ( Bson :: I64 ( 5 ) ) ;
131
+ let d_bad1 = Decoder :: new ( Bson :: String ( "not an isize" . to_string ( ) ) ) ;
132
+ let d_bad2 = Decoder :: new ( Bson :: I64 ( 11 ) ) ;
133
133
134
- assert_eq ! ( Range10 ( 5 ) , t!( Deserialize :: deserialize( & mut d_good) ) ) ;
134
+ assert_eq ! ( Range10 ( 5 ) , t!( Deserialize :: deserialize( d_good) ) ) ;
135
135
136
- let err1: Result < Range10 , _ > = Deserialize :: deserialize ( & mut d_bad1) ;
136
+ let err1: Result < Range10 , _ > = Deserialize :: deserialize ( d_bad1) ;
137
137
assert ! ( err1. is_err( ) ) ;
138
- let err2: Result < Range10 , _ > = Deserialize :: deserialize ( & mut d_bad2) ;
138
+ let err2: Result < Range10 , _ > = Deserialize :: deserialize ( d_bad2) ;
139
139
assert ! ( err2. is_err( ) ) ;
140
140
}
141
141
@@ -316,10 +316,10 @@ fn type_conversion() {
316
316
#[ derive( Serialize , Deserialize , PartialEq , Debug ) ]
317
317
struct Foo { bar : i32 }
318
318
319
- let mut d = Decoder :: new ( bdoc ! {
319
+ let d = Decoder :: new ( bdoc ! {
320
320
"bar" => ( 1.0 )
321
321
} ) ;
322
- let a: Result < Foo , DecoderError > = Deserialize :: deserialize ( & mut d) ;
322
+ let a: Result < Foo , DecoderError > = Deserialize :: deserialize ( d) ;
323
323
assert_eq ! (
324
324
a. unwrap( ) ,
325
325
Foo { bar: 1 }
@@ -331,8 +331,8 @@ fn missing_errors() {
331
331
#[ derive( Serialize , Deserialize , PartialEq , Debug ) ]
332
332
struct Foo { bar : i32 }
333
333
334
- let mut d = Decoder :: new ( bdoc ! { } ) ;
335
- let a: Result < Foo , DecoderError > = Deserialize :: deserialize ( & mut d) ;
334
+ let d = Decoder :: new ( bdoc ! { } ) ;
335
+ let a: Result < Foo , DecoderError > = Deserialize :: deserialize ( d) ;
336
336
337
337
assert ! ( a. is_err( ) ) ;
338
338
}
@@ -419,12 +419,12 @@ fn unused_fields() {
419
419
struct Foo { a : i32 }
420
420
421
421
let v = Foo { a : 2 } ;
422
- let mut d = Decoder :: new ( bdoc ! {
422
+ let d = Decoder :: new ( bdoc ! {
423
423
"a" => 2 ,
424
424
"b" => 5
425
425
} ) ;
426
426
427
- assert_eq ! ( v, t!( Deserialize :: deserialize( & mut d) ) ) ;
427
+ assert_eq ! ( v, t!( Deserialize :: deserialize( d) ) ) ;
428
428
}
429
429
430
430
#[ test]
@@ -435,14 +435,14 @@ fn unused_fields2() {
435
435
struct Bar { a : i32 }
436
436
437
437
let v = Foo { a : Bar { a : 2 } } ;
438
- let mut d = Decoder :: new ( bdoc ! {
438
+ let d = Decoder :: new ( bdoc ! {
439
439
"a" => {
440
440
"a" => 2 ,
441
441
"b" => 5
442
442
}
443
443
} ) ;
444
444
445
- assert_eq ! ( v, t!( Deserialize :: deserialize( & mut d) ) ) ;
445
+ assert_eq ! ( v, t!( Deserialize :: deserialize( d) ) ) ;
446
446
}
447
447
448
448
#[ test]
@@ -453,12 +453,12 @@ fn unused_fields3() {
453
453
struct Bar { a : i32 }
454
454
455
455
let v = Foo { a : Bar { a : 2 } } ;
456
- let mut d = Decoder :: new ( bdoc ! {
456
+ let d = Decoder :: new ( bdoc ! {
457
457
"a" => {
458
458
"a" => 2
459
459
}
460
460
} ) ;
461
- assert_eq ! ( v, t!( Deserialize :: deserialize( & mut d) ) ) ;
461
+ assert_eq ! ( v, t!( Deserialize :: deserialize( d) ) ) ;
462
462
}
463
463
464
464
#[ test]
@@ -469,12 +469,12 @@ fn unused_fields4() {
469
469
let mut map = BTreeMap :: new ( ) ;
470
470
map. insert ( "a" . to_owned ( ) , "foo" . to_owned ( ) ) ;
471
471
let v = Foo { a : map } ;
472
- let mut d = Decoder :: new ( bdoc ! {
472
+ let d = Decoder :: new ( bdoc ! {
473
473
"a" => {
474
474
"a" => "foo"
475
475
}
476
476
} ) ;
477
- assert_eq ! ( v, t!( Deserialize :: deserialize( & mut d) ) ) ;
477
+ assert_eq ! ( v, t!( Deserialize :: deserialize( d) ) ) ;
478
478
}
479
479
480
480
#[ test]
@@ -483,10 +483,10 @@ fn unused_fields5() {
483
483
struct Foo { a : Vec < String > }
484
484
485
485
let v = Foo { a : vec ! [ "a" . to_string( ) ] } ;
486
- let mut d = Decoder :: new ( bdoc ! {
486
+ let d = Decoder :: new ( bdoc ! {
487
487
"a" => [ "a" ]
488
488
} ) ;
489
- assert_eq ! ( v, t!( Deserialize :: deserialize( & mut d) ) ) ;
489
+ assert_eq ! ( v, t!( Deserialize :: deserialize( d) ) ) ;
490
490
}
491
491
492
492
#[ test]
@@ -495,10 +495,10 @@ fn unused_fields6() {
495
495
struct Foo { a : Option < Vec < String > > }
496
496
497
497
let v = Foo { a : Some ( vec ! [ ] ) } ;
498
- let mut d = Decoder :: new ( bdoc ! {
498
+ let d = Decoder :: new ( bdoc ! {
499
499
"a" => [ ]
500
500
} ) ;
501
- assert_eq ! ( v, t!( Deserialize :: deserialize( & mut d) ) ) ;
501
+ assert_eq ! ( v, t!( Deserialize :: deserialize( d) ) ) ;
502
502
}
503
503
504
504
#[ test]
@@ -509,22 +509,25 @@ fn unused_fields7() {
509
509
struct Bar { a : i32 }
510
510
511
511
let v = Foo { a : vec ! [ Bar { a: 1 } ] } ;
512
- let mut d = Decoder :: new ( bdoc ! {
512
+ let d = Decoder :: new ( bdoc ! {
513
513
"a" => [ { "a" => 1 , "b" => 2 } ]
514
514
} ) ;
515
- assert_eq ! ( v, t!( Deserialize :: deserialize( & mut d) ) ) ;
515
+ assert_eq ! ( v, t!( Deserialize :: deserialize( d) ) ) ;
516
516
}
517
517
518
518
#[ test]
519
519
fn empty_arrays ( ) {
520
520
#[ derive( Serialize , Deserialize , PartialEq , Debug ) ]
521
- struct Foo { a : Vec < Bar > }
521
+ struct Foo {
522
+ #[ serde( default ) ]
523
+ a : Vec < Bar >
524
+ }
522
525
#[ derive( Serialize , Deserialize , PartialEq , Debug ) ]
523
526
struct Bar ;
524
527
525
528
let v = Foo { a : vec ! [ ] } ;
526
- let mut d = Decoder :: new ( bdoc ! { } ) ;
527
- assert_eq ! ( v, t!( Deserialize :: deserialize( & mut d) ) ) ;
529
+ let d = Decoder :: new ( bdoc ! { } ) ;
530
+ assert_eq ! ( v, t!( Deserialize :: deserialize( d) ) ) ;
528
531
}
529
532
530
533
#[ test]
@@ -535,12 +538,12 @@ fn empty_arrays2() {
535
538
struct Bar ;
536
539
537
540
let v = Foo { a : None } ;
538
- let mut d = Decoder :: new ( bdoc ! { } ) ;
539
- assert_eq ! ( v, t!( Deserialize :: deserialize( & mut d) ) ) ;
541
+ let d = Decoder :: new ( bdoc ! { } ) ;
542
+ assert_eq ! ( v, t!( Deserialize :: deserialize( d) ) ) ;
540
543
541
544
let v = Foo { a : Some ( vec ! [ ] ) } ;
542
- let mut d = Decoder :: new ( bdoc ! {
545
+ let d = Decoder :: new ( bdoc ! {
543
546
"a" => [ ]
544
547
} ) ;
545
- assert_eq ! ( v, t!( Deserialize :: deserialize( & mut d) ) ) ;
548
+ assert_eq ! ( v, t!( Deserialize :: deserialize( d) ) ) ;
546
549
}
0 commit comments