Skip to content

Commit 3654859

Browse files
jcdyerzonyitoo
authored andcommitted
Clean macro imports (#131)
* Allow bson! and doc! macros to work without importing both * Remove extern crate references
1 parent 4a056c2 commit 3654859

File tree

16 files changed

+48
-89
lines changed

16 files changed

+48
-89
lines changed

README.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,6 @@ bson = "0.14"
2121
```
2222

2323
## Usage
24-
Link the library in _main.rs_:
25-
26-
```rust
27-
#[macro_use(bson, doc)]
28-
extern crate bson;
29-
```
3024

3125
Prepare your struct for Serde serialization:
3226

@@ -63,6 +57,8 @@ if let bson::Bson::Document(document) = serialized_person {
6357
Deserialize the struct:
6458

6559
```rust
60+
use bson::doc;
61+
6662
// Read the document from a MongoDB collection
6763
let person_document = mongoCollection.find_one(Some(doc! { "_id": bson::oid::ObjectId::with_string("12345").expect("Id not valid") }), None)?
6864
.expect("Document not found");

examples/decode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
extern crate bson;
1+
use bson;
22

33
use std::fs::File;
44

examples/encode.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
extern crate bson;
2-
extern crate chrono;
31

4-
use bson::{decode_document, encode_document, oid, Array, Bson, Document};
52
use std::io::Cursor;
63

4+
use bson::{decode_document, encode_document, oid, Array, Bson, Document};
5+
use chrono;
6+
77
fn main() {
88
let mut doc = Document::new();
99
doc.insert("foo".to_string(), Bson::String("bar".to_string()));

serde-tests/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
name = "serde-tests"
33
version = "0.1.0"
44
authors = ["Kevin Yeh <[email protected]>"]
5+
edition = "2018"
56

67
[dependencies]
7-
serde = "1.0"
88
bson = { path = ".." }
9-
serde_derive = "1.0"
9+
serde = { version = "1.0", features = ["derive"] }
1010

1111
[lib]
1212
name = "serde_tests"

serde-tests/test.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
extern crate bson;
2-
extern crate serde;
3-
#[macro_use] extern crate serde_derive;
4-
51
use std::collections::{BTreeMap, HashSet};
62
use serde::{Deserialize, Serialize, Deserializer};
73
use serde::de::Unexpected;

src/bson.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use std::ops::{Deref, DerefMut};
2727
use chrono::offset::TimeZone;
2828
use chrono::{DateTime, Timelike, Utc};
2929
use hex;
30-
use serde_json::Value;
30+
use serde_json::{Value, json};
3131

3232
#[cfg(feature = "decimal128")]
3333
use crate::decimal128::Decimal128;
@@ -751,7 +751,6 @@ impl Bson {
751751
///
752752
/// ```rust,ignore
753753
/// use serde::{Serialize, Deserialize};
754-
/// extern crate bson;
755754
/// use bson::TimeStamp;
756755
///
757756
/// #[derive(Serialize, Deserialize)]
@@ -770,9 +769,7 @@ pub struct TimeStamp {
770769
/// Just a helper for convenience
771770
///
772771
/// ```rust,ignore
773-
/// #[macro_use]
774-
/// extern crate serde_derive;
775-
/// extern crate bson;
772+
/// use serde::{Serialize, Deserialize};
776773
/// use bson::UtcDateTime;
777774
///
778775
/// #[derive(Serialize, Deserialize)]

src/encoder/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ use chrono::Timelike;
3737
use crate::bson::Bson;
3838
#[cfg(feature = "decimal128")]
3939
use crate::decimal128::Decimal128;
40-
use crate::serde::Serialize;
40+
use ::serde::Serialize;
4141

4242
fn write_string<W: Write + ?Sized>(writer: &mut W, s: &str) -> EncoderResult<()> {
4343
writer.write_i32::<LittleEndian>(s.len() as i32 + 1)?;

src/lib.rs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
//! ## Basic usage
2828
//!
2929
//! ```rust
30-
//! extern crate bson;
3130
//! use bson::{decode_document, encode_document, Bson, Document};
3231
//! use std::io::Cursor;
3332
//!
@@ -42,18 +41,6 @@
4241
//! }
4342
//! ```
4443
45-
extern crate byteorder;
46-
extern crate chrono;
47-
extern crate hex;
48-
extern crate linked_hash_map;
49-
extern crate rand;
50-
extern crate serde;
51-
#[macro_use]
52-
extern crate serde_json;
53-
#[cfg(feature = "decimal128")]
54-
extern crate decimal;
55-
extern crate md5;
56-
extern crate time;
5744

5845
pub use self::bson::{Array, Bson, Document, TimeStamp, UtcDateTime};
5946
#[cfg(feature = "decimal128")]

src/macros.rs

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
/// Construct a bson::BSON value from a literal.
44
///
55
/// ```rust
6-
/// # #[macro_use]
7-
/// # extern crate bson;
6+
/// # use bson::bson;
87
/// #
98
/// # fn main() {
109
/// let value = bson!({
@@ -40,32 +39,32 @@ macro_rules! bson {
4039

4140
// Next element is `null`.
4241
(@array [$($elems:expr,)*] null $($rest:tt)*) => {
43-
bson!(@array [$($elems,)* bson!(null)] $($rest)*)
42+
$crate::bson!(@array [$($elems,)* $crate::bson!(null)] $($rest)*)
4443
};
4544

4645
// Next element is an array.
4746
(@array [$($elems:expr,)*] [$($array:tt)*] $($rest:tt)*) => {
48-
bson!(@array [$($elems,)* bson!([$($array)*])] $($rest)*)
47+
$crate::bson!(@array [$($elems,)* $crate::bson!([$($array)*])] $($rest)*)
4948
};
5049

5150
// Next element is a map.
5251
(@array [$($elems:expr,)*] {$($map:tt)*} $($rest:tt)*) => {
53-
bson!(@array [$($elems,)* bson!({$($map)*})] $($rest)*)
52+
$crate::bson!(@array [$($elems,)* $crate::bson!({$($map)*})] $($rest)*)
5453
};
5554

5655
// Next element is an expression followed by comma.
5756
(@array [$($elems:expr,)*] $next:expr, $($rest:tt)*) => {
58-
bson!(@array [$($elems,)* bson!($next),] $($rest)*)
57+
$crate::bson!(@array [$($elems,)* $crate::bson!($next),] $($rest)*)
5958
};
6059

6160
// Last element is an expression with no trailing comma.
6261
(@array [$($elems:expr,)*] $last:expr) => {
63-
bson!(@array [$($elems,)* bson!($last)])
62+
$crate::bson!(@array [$($elems,)* $crate::bson!($last)])
6463
};
6564

6665
// Comma after the most recent element.
6766
(@array [$($elems:expr),*] , $($rest:tt)*) => {
68-
bson!(@array [$($elems,)*] $($rest)*)
67+
$crate::bson!(@array [$($elems,)*] $($rest)*)
6968
};
7069

7170
//////////////////////////////////////////////////////////////////////////
@@ -84,7 +83,7 @@ macro_rules! bson {
8483
// Insert the current entry followed by trailing comma.
8584
(@object $object:ident [$($key:tt)+] ($value:expr) , $($rest:tt)*) => {
8685
$object.insert_bson(($($key)+).into(), $value);
87-
bson!(@object $object () ($($rest)*) ($($rest)*));
86+
$crate::bson!(@object $object () ($($rest)*) ($($rest)*));
8887
};
8988

9089
// Insert the last entry without trailing comma.
@@ -94,65 +93,65 @@ macro_rules! bson {
9493

9594
// Next value is `null`.
9695
(@object $object:ident ($($key:tt)+) (=> null $($rest:tt)*) $copy:tt) => {
97-
bson!(@object $object [$($key)+] (bson!(null)) $($rest)*);
96+
$crate::bson!(@object $object [$($key)+] ($crate::bson!(null)) $($rest)*);
9897
};
9998

10099
(@object $object:ident ($($key:tt)+) (: null $($rest:tt)*) $copy:tt) => {
101-
bson!(@object $object [$($key)+] (bson!(null)) $($rest)*);
100+
$crate::bson!(@object $object [$($key)+] ($crate::bson!(null)) $($rest)*);
102101
};
103102

104103
// Next value is an array.
105104
(@object $object:ident ($($key:tt)+) (=> [$($array:tt)*] $($rest:tt)*) $copy:tt) => {
106-
bson!(@object $object [$($key)+] (bson!([$($array)*])) $($rest)*);
105+
$crate::bson!(@object $object [$($key)+] ($crate::bson!([$($array)*])) $($rest)*);
107106
};
108107

109108
(@object $object:ident ($($key:tt)+) (: [$($array:tt)*] $($rest:tt)*) $copy:tt) => {
110-
bson!(@object $object [$($key)+] (bson!([$($array)*])) $($rest)*);
109+
$crate::bson!(@object $object [$($key)+] ($crate::bson!([$($array)*])) $($rest)*);
111110
};
112111

113112
// Next value is a map.
114113
(@object $object:ident ($($key:tt)+) (=> {$($map:tt)*} $($rest:tt)*) $copy:tt) => {
115-
bson!(@object $object [$($key)+] (bson!({$($map)*})) $($rest)*);
114+
$crate::bson!(@object $object [$($key)+] ($crate::bson!({$($map)*})) $($rest)*);
116115
};
117116

118117
(@object $object:ident ($($key:tt)+) (: {$($map:tt)*} $($rest:tt)*) $copy:tt) => {
119-
bson!(@object $object [$($key)+] (bson!({$($map)*})) $($rest)*);
118+
$crate::bson!(@object $object [$($key)+] ($crate::bson!({$($map)*})) $($rest)*);
120119
};
121120

122121
// Next value is an expression followed by comma.
123122
(@object $object:ident ($($key:tt)+) (=> $value:expr , $($rest:tt)*) $copy:tt) => {
124-
bson!(@object $object [$($key)+] (bson!($value)) , $($rest)*);
123+
$crate::bson!(@object $object [$($key)+] ($crate::bson!($value)) , $($rest)*);
125124
};
126125

127126
(@object $object:ident ($($key:tt)+) (: $value:expr , $($rest:tt)*) $copy:tt) => {
128-
bson!(@object $object [$($key)+] (bson!($value)) , $($rest)*);
127+
$crate::bson!(@object $object [$($key)+] ($crate::bson!($value)) , $($rest)*);
129128
};
130129

131130
// Last value is an expression with no trailing comma.
132131
(@object $object:ident ($($key:tt)+) (=> $value:expr) $copy:tt) => {
133-
bson!(@object $object [$($key)+] (bson!($value)));
132+
$crate::bson!(@object $object [$($key)+] ($crate::bson!($value)));
134133
};
135134

136135
(@object $object:ident ($($key:tt)+) (: $value:expr) $copy:tt) => {
137-
bson!(@object $object [$($key)+] (bson!($value)));
136+
$crate::bson!(@object $object [$($key)+] ($crate::bson!($value)));
138137
};
139138

140139
// Missing value for last entry. Trigger a reasonable error message.
141140
(@object $object:ident ($($key:tt)+) (=>) $copy:tt) => {
142141
// "unexpected end of macro invocation"
143-
bson!();
142+
$crate::bson!();
144143
};
145144

146145
(@object $object:ident ($($key:tt)+) (:) $copy:tt) => {
147146
// "unexpected end of macro invocation"
148-
bson!();
147+
$crate::bson!();
149148
};
150149

151150
// Missing key-value separator and value for last entry.
152151
// Trigger a reasonable error message.
153152
(@object $object:ident ($($key:tt)+) () $copy:tt) => {
154153
// "unexpected end of macro invocation"
155-
bson!();
154+
$crate::bson!();
156155
};
157156

158157
// Misplaced key-value separator. Trigger a reasonable error message.
@@ -175,16 +174,16 @@ macro_rules! bson {
175174
// Key is fully parenthesized. This avoids clippy double_parens false
176175
// positives because the parenthesization may be necessary here.
177176
(@object $object:ident () (($key:expr) => $($rest:tt)*) $copy:tt) => {
178-
bson!(@object $object ($key) (=> $($rest)*) (=> $($rest)*));
177+
$crate::bson!(@object $object ($key) (=> $($rest)*) (=> $($rest)*));
179178
};
180179

181180
(@object $object:ident () (($key:expr) : $($rest:tt)*) $copy:tt) => {
182-
bson!(@object $object ($key) (: $($rest)*) (: $($rest)*));
181+
$crate::bson!(@object $object ($key) (: $($rest)*) (: $($rest)*));
183182
};
184183

185184
// Munch a token into the current key.
186185
(@object $object:ident ($($key:tt)*) ($tt:tt $($rest:tt)*) $copy:tt) => {
187-
bson!(@object $object ($($key)* $tt) ($($rest)*) ($($rest)*));
186+
$crate::bson!(@object $object ($($key)* $tt) ($($rest)*) ($($rest)*));
188187
};
189188

190189
//////////////////////////////////////////////////////////////////////////
@@ -202,15 +201,15 @@ macro_rules! bson {
202201
};
203202

204203
([ $($tt:tt)+ ]) => {
205-
$crate::Bson::Array(bson!(@array [] $($tt)+))
204+
$crate::Bson::Array($crate::bson!(@array [] $($tt)+))
206205
};
207206

208207
({}) => {
209-
$crate::Bson::Document(doc!{})
208+
$crate::Bson::Document($crate::doc!{})
210209
};
211210

212211
({$($tt:tt)+}) => {
213-
$crate::Bson::Document(doc!{$($tt)+});
212+
$crate::Bson::Document($crate::doc!{$($tt)+});
214213
};
215214

216215
// Any Serialize type: numbers, strings, struct literals, variables etc.
@@ -223,8 +222,7 @@ macro_rules! bson {
223222
/// Construct a bson::Document value.
224223
///
225224
/// ```rust
226-
/// # #[macro_use]
227-
/// # extern crate bson;
225+
/// # use bson::doc;
228226
/// #
229227
/// # fn main() {
230228
/// let value = doc! {
@@ -244,7 +242,7 @@ macro_rules! doc {
244242
() => {{ $crate::Document::new() }};
245243
( $($tt:tt)+ ) => {{
246244
let mut object = $crate::Document::new();
247-
bson!(@object object () ($($tt)+) ($($tt)+));
245+
$crate::bson!(@object object () ($($tt)+) ($($tt)+));
248246
object
249247
}};
250248
}

tests/lib.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1 @@
1-
#[macro_use(assert_matches)]
2-
extern crate assert_matches;
3-
#[macro_use(bson, doc)]
4-
extern crate bson;
5-
extern crate byteorder;
6-
extern crate chrono;
7-
#[cfg(feature = "decimal128")]
8-
extern crate decimal;
9-
extern crate hex;
10-
111
mod modules;

0 commit comments

Comments
 (0)