1
1
extern crate serde_json;
2
2
3
- use self :: serde_json:: Value ;
4
- use bson:: { Bson , Document } ;
3
+ use self :: serde_json:: { Value , json } ;
4
+ use bson:: { Bson , Document , oid :: ObjectId , spec :: BinarySubtype } ;
5
5
6
6
#[ test]
7
7
fn to_json ( ) {
8
8
let mut doc = Document :: new ( ) ;
9
+ doc. insert ( "_id" , Bson :: ObjectId ( ObjectId :: with_bytes ( * b"abcdefghijkl" ) ) ) ;
9
10
doc. insert ( "first" , Bson :: I32 ( 1 ) ) ;
10
11
doc. insert ( "second" , Bson :: String ( "foo" . to_owned ( ) ) ) ;
11
12
doc. insert ( "alphanumeric" , Bson :: String ( "bar" . to_owned ( ) ) ) ;
@@ -14,6 +15,12 @@ fn to_json() {
14
15
assert ! ( data. is_object( ) ) ;
15
16
let obj = data. as_object ( ) . unwrap ( ) ;
16
17
18
+ let id = obj. get ( "_id" ) . unwrap ( ) ;
19
+ assert ! ( id. is_object( ) ) ;
20
+ let id_val = id. get ( "$oid" ) . unwrap ( ) ;
21
+ assert ! ( id_val. is_string( ) ) ;
22
+ assert_eq ! ( id_val, "6162636465666768696a6b6c" ) ;
23
+
17
24
let first = obj. get ( "first" ) . unwrap ( ) ;
18
25
assert ! ( first. is_number( ) ) ;
19
26
assert_eq ! ( first. as_i64( ) . unwrap( ) , 1 ) ;
@@ -39,3 +46,34 @@ fn document_default() {
39
46
assert_eq ! ( doc1. keys( ) . count( ) , 0 ) ;
40
47
assert_eq ! ( doc1, Document :: new( ) ) ;
41
48
}
49
+
50
+ #[ test]
51
+ fn from_impls ( ) {
52
+ assert_eq ! ( Bson :: from( 1.5f32 ) , Bson :: FloatingPoint ( 1.5 ) ) ;
53
+ assert_eq ! ( Bson :: from( 2.25f64 ) , Bson :: FloatingPoint ( 2.25 ) ) ;
54
+ assert_eq ! ( Bson :: from( "data" ) , Bson :: String ( String :: from( "data" ) ) ) ;
55
+ assert_eq ! ( Bson :: from( String :: from( "data" ) ) , Bson :: String ( String :: from( "data" ) ) ) ;
56
+ assert_eq ! ( Bson :: from( doc!{ } ) , Bson :: Document ( Document :: new( ) ) ) ;
57
+ assert_eq ! ( Bson :: from( false ) , Bson :: Boolean ( false ) ) ;
58
+ assert_eq ! ( Bson :: from( ( String :: from( "\\ s+$" ) , String :: from( "i" ) ) ) , Bson :: RegExp ( String :: from( "\\ s+$" ) , String :: from( "i" ) ) ) ;
59
+ assert_eq ! ( Bson :: from( ( String :: from( "alert(\" hi\" );" ) , doc!{ } ) ) , Bson :: JavaScriptCodeWithScope ( String :: from( "alert(\" hi\" );" ) , doc!{ } ) ) ;
60
+ //
61
+ assert_eq ! ( Bson :: from( ( BinarySubtype :: Generic , vec![ 1 , 2 , 3 ] ) ) , Bson :: Binary ( BinarySubtype :: Generic , vec![ 1 , 2 , 3 ] ) ) ;
62
+ assert_eq ! ( Bson :: from( -48i32 ) , Bson :: I32 ( -48 ) ) ;
63
+ assert_eq ! ( Bson :: from( -96i64 ) , Bson :: I64 ( -96 ) ) ;
64
+ assert_eq ! ( Bson :: from( 152u32 ) , Bson :: I32 ( 152 ) ) ;
65
+ assert_eq ! ( Bson :: from( 4096u64 ) , Bson :: I64 ( 4096 ) ) ;
66
+
67
+ let oid = ObjectId :: new ( ) . unwrap ( ) ;
68
+ assert_eq ! ( Bson :: from( b"abcdefghijkl" ) , Bson :: ObjectId ( ObjectId :: with_bytes( * b"abcdefghijkl" ) ) ) ;
69
+ assert_eq ! ( Bson :: from( oid. clone( ) ) , Bson :: ObjectId ( oid. clone( ) ) ) ;
70
+ assert_eq ! ( Bson :: from( vec![ 1 , 2 , 3 ] ) , Bson :: Array ( vec![ Bson :: I32 ( 1 ) , Bson :: I32 ( 2 ) , Bson :: I32 ( 3 ) ] ) ) ;
71
+ assert_eq ! ( Bson :: from( json!( { "_id" : { "$oid" : oid. to_hex( ) } , "name" : [ "bson-rs" ] } ) ) , Bson :: Document ( doc!{ "_id" : & oid, "name" : [ "bson-rs" ] } ) ) ;
72
+
73
+ // References
74
+ assert_eq ! ( Bson :: from( & 24i32 ) , Bson :: I32 ( 24 ) ) ;
75
+ assert_eq ! ( Bson :: from( & String :: from( "data" ) ) , Bson :: String ( String :: from( "data" ) ) ) ;
76
+ assert_eq ! ( Bson :: from( & oid) , Bson :: ObjectId ( oid) ) ;
77
+ assert_eq ! ( Bson :: from( & doc!{ "a" : "b" } ) , Bson :: Document ( doc!{ "a" : "b" } ) ) ;
78
+
79
+ }
0 commit comments