Skip to content
This repository was archived by the owner on Oct 18, 2021. It is now read-only.

Commit e3626f7

Browse files
authored
Integrate clippy lint as a feature (#198)
1 parent 9bc97f9 commit e3626f7

File tree

21 files changed

+208
-167
lines changed

21 files changed

+208
-167
lines changed

Cargo.toml

+5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ semver = "0.5.0"
2323
separator = "0.3.1"
2424
time = "0.1.35"
2525

26+
[dependencies.clippy]
27+
optional = true
28+
version = "*"
29+
2630
[dependencies.openssl]
2731
optional = true
2832
version = "0.9.3"
@@ -41,3 +45,4 @@ version = "0.9.8"
4145
[features]
4246
default = []
4347
ssl = ["openssl"]
48+
lint = ["clippy"]

clippy.toml

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
cyclomatic-complexity-threshold = 30

src/coll/batch.rs

+2-16
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,7 @@ impl From<WriteModel> for Batch {
8484
multi: true,
8585
}])
8686
}
87-
WriteModel::ReplaceOne { filter, replacement: update, upsert } => {
88-
Batch::Update(vec![UpdateModel {
89-
filter: filter,
90-
update: update,
91-
upsert: upsert,
92-
multi: false,
93-
}])
94-
}
87+
WriteModel::ReplaceOne { filter, replacement: update, upsert } |
9588
WriteModel::UpdateOne { filter, update, upsert } => {
9689
Batch::Update(vec![UpdateModel {
9790
filter: filter,
@@ -160,14 +153,7 @@ impl Batch {
160153
}
161154
Batch::Update(ref mut models) => {
162155
match model {
163-
WriteModel::ReplaceOne { filter, replacement: update, upsert } => {
164-
models.push(UpdateModel {
165-
filter: filter,
166-
update: update,
167-
upsert: upsert,
168-
multi: false,
169-
})
170-
}
156+
WriteModel::ReplaceOne { filter, replacement: update, upsert } |
171157
WriteModel::UpdateOne { filter, update, upsert } => {
172158
models.push(UpdateModel {
173159
filter: filter,

src/coll/mod.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ impl Collection {
4545
write_concern: Option<WriteConcern>)
4646
-> Collection {
4747

48-
let rp = read_preference.unwrap_or(db.read_preference.to_owned());
49-
let wc = write_concern.unwrap_or(db.write_concern.to_owned());
48+
let rp = read_preference.unwrap_or_else(|| db.read_preference.to_owned());
49+
let wc = write_concern.unwrap_or_else(|| db.write_concern.to_owned());
5050

5151
if create {
5252
// Attempt to create the collection explicitly, or fail silently.
@@ -97,7 +97,7 @@ impl Collection {
9797
options: Option<AggregateOptions>)
9898
-> Result<Cursor> {
9999
let pipeline_map: Vec<_> = pipeline.into_iter()
100-
.map(|bdoc| Bson::Document(bdoc))
100+
.map(Bson::Document)
101101
.collect();
102102

103103
let mut spec = doc! {
@@ -169,7 +169,7 @@ impl Collection {
169169
}
170170

171171
let read_preference = options.and_then(|o| o.read_preference)
172-
.unwrap_or(self.read_preference.clone());
172+
.unwrap_or_else(|| self.read_preference.clone());
173173

174174
let result = try!(self.db.command(spec, CommandType::Distinct, Some(read_preference)));
175175
match result.get("values") {
@@ -261,7 +261,7 @@ impl Collection {
261261
cmd = merge_options(cmd, options);
262262

263263
let res = try!(self.db.command(cmd, cmd_type, None));
264-
let wc = write_concern.unwrap_or(self.write_concern.clone());
264+
let wc = write_concern.unwrap_or_else(|| self.write_concern.clone());
265265
try!(WriteException::validate_write_result(res.clone(), wc));
266266

267267
let doc = match res.get("value") {
@@ -554,7 +554,7 @@ impl Collection {
554554
cmd_type: CommandType)
555555
-> Result<(Vec<Bson>, Option<BulkWriteException>)> {
556556

557-
let wc = write_concern.unwrap_or(self.write_concern.clone());
557+
let wc = write_concern.unwrap_or_else(|| self.write_concern.clone());
558558

559559
let mut converted_docs = Vec::new();
560560
let mut ids = Vec::new();
@@ -637,14 +637,14 @@ impl Collection {
637637
docs: Vec<bson::Document>,
638638
options: Option<InsertManyOptions>)
639639
-> Result<InsertManyResult> {
640-
let write_concern = options.as_ref().map(|opts| opts.write_concern.clone()).unwrap_or(None);
640+
let write_concern = options.as_ref().map_or(None, |opts| opts.write_concern.clone());
641641

642642
let (ids, exception) =
643643
try!(self.insert(docs, options, write_concern, CommandType::InsertMany));
644644

645645
let mut map = BTreeMap::new();
646-
for i in 0..ids.len() {
647-
map.insert(i as i64, ids.get(i).unwrap().to_owned());
646+
for (i, item) in ids.iter().enumerate() {
647+
map.insert(i as i64, item.to_owned());
648648
}
649649

650650
if let Some(ref exc) = exception {
@@ -664,7 +664,7 @@ impl Collection {
664664
cmd_type: CommandType)
665665
-> Result<BulkDeleteResult> {
666666

667-
let wc = write_concern.unwrap_or(self.write_concern.clone());
667+
let wc = write_concern.unwrap_or_else(|| self.write_concern.clone());
668668

669669
let mut deletes = Vec::new();
670670
for model in models {
@@ -739,7 +739,7 @@ impl Collection {
739739
write_concern: Option<WriteConcern>,
740740
cmd_type: CommandType)
741741
-> Result<BulkUpdateResult> {
742-
let wc = write_concern.unwrap_or(self.write_concern.clone());
742+
let wc = write_concern.unwrap_or_else(|| self.write_concern.clone());
743743

744744
let mut updates = Vec::new();
745745
for model in models {

src/coll/options.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ impl From<FindOneAndDeleteOptions> for bson::Document {
246246
document.insert("writeConcern", Bson::Document(write_concern.to_bson()));
247247
}
248248

249-
return document;
249+
document
250250
}
251251
}
252252

@@ -293,7 +293,7 @@ impl From<FindOneAndUpdateOptions> for bson::Document {
293293
document.insert("writeConcern", Bson::Document(write_concern.to_bson()));
294294
}
295295

296-
return document;
296+
document
297297
}
298298
}
299299

src/cursor.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ macro_rules! try_or_emit {
7979
connection_string: $connstring,
8080
});
8181

82-
if let Err(_) = hook_result {
82+
if hook_result.is_err() {
8383
return Err(Error::EventListenerError(Some(Box::new(e))));
8484
}
8585
}
@@ -227,10 +227,10 @@ impl Cursor {
227227
};
228228

229229
// Set slave_ok flag based on the result from server selection.
230-
let new_flags = if !slave_ok {
231-
flags
232-
} else {
230+
let new_flags = if slave_ok {
233231
flags | flags::SLAVE_OK
232+
} else {
233+
flags
234234
};
235235

236236
// Send read_preference to the server based on the result from server selection.
@@ -274,7 +274,7 @@ impl Cursor {
274274
let mut socket = stream.get_socket();
275275
let req_id = client.get_req_id();
276276

277-
let index = namespace.find('.').unwrap_or(namespace.len());
277+
let index = namespace.find('.').unwrap_or_else(|| namespace.len());
278278
let db_name = String::from(&namespace[..index]);
279279
let coll_name = String::from(&namespace[index + 1..]);
280280
let cmd_name = cmd_type.to_str();
@@ -318,7 +318,7 @@ impl Cursor {
318318
connection_string: connstring.clone(),
319319
});
320320

321-
if let Err(_) = hook_result {
321+
if hook_result.is_err() {
322322
return Err(Error::EventListenerError(None));
323323
}
324324
}
@@ -407,7 +407,7 @@ impl Cursor {
407407
self.batch_size,
408408
self.cursor_id);
409409

410-
let index = self.namespace.rfind('.').unwrap_or(self.namespace.len());
410+
let index = self.namespace.rfind('.').unwrap_or_else(|| self.namespace.len());
411411
let db_name = String::from(&self.namespace[..index]);
412412
let cmd_name = String::from("get_more");
413413
let connstring = format!("{}", try!(socket.get_ref().peer_addr()));
@@ -421,7 +421,7 @@ impl Cursor {
421421
connection_string: connstring.clone(),
422422
});
423423

424-
if let Err(_) = hook_result {
424+
if hook_result.is_err() {
425425
return Err(Error::EventListenerError(None));
426426
}
427427
}

src/db/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ impl ThreadedDatabase for Database {
169169
read_preference: Option<ReadPreference>,
170170
write_concern: Option<WriteConcern>)
171171
-> Database {
172-
let rp = read_preference.unwrap_or(client.read_preference.to_owned());
173-
let wc = write_concern.unwrap_or(client.write_concern.to_owned());
172+
let rp = read_preference.unwrap_or_else(|| client.read_preference.to_owned());
173+
let wc = write_concern.unwrap_or_else(|| client.write_concern.to_owned());
174174

175175
Arc::new(DatabaseInner {
176176
name: String::from(name),

src/db/options.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,11 @@ impl From<CreateUserOptions> for Document {
7878
document.insert("customData", Bson::Document(custom_data));
7979
}
8080

81-
document.insert("roles", Role::to_bson_array(options.roles));
81+
let roles_barr = options.roles.into_iter()
82+
.map(|r| r.to_bson())
83+
.collect();
84+
85+
document.insert("roles", Bson::Array(roles_barr));
8286

8387
if let Some(write_concern) = options.write_concern {
8488
document.insert("writeConcern", Bson::Document(write_concern.to_bson()));

src/db/roles.rs

+19-9
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::string::ToString;
33

44
use bson::Bson;
55

6+
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
67
pub enum SingleDatabaseRole {
78
Read,
89
ReadWrite,
@@ -37,6 +38,7 @@ impl ToString for SingleDatabaseRole {
3738
}
3839
}
3940

41+
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
4042
pub enum AllDatabaseRole {
4143
Read,
4244
ReadWrite,
@@ -57,6 +59,7 @@ impl ToString for AllDatabaseRole {
5759
}
5860
}
5961

62+
#[derive(Clone, Debug, PartialEq, Eq)]
6063
pub enum Role {
6164
All(AllDatabaseRole),
6265
Single {
@@ -65,19 +68,26 @@ pub enum Role {
6568
},
6669
}
6770

68-
impl Role {
69-
fn to_bson(&self) -> Bson {
70-
match *self {
71-
Role::All(ref role) => Bson::String(role.to_string()),
72-
Role::Single { ref role, ref db } => {
73-
Bson::Document(doc! {
74-
"role" => (Bson::String(role.to_string())),
75-
"db" => (Bson::String(db.to_owned()))
76-
})
71+
impl From<Role> for Bson {
72+
fn from(role: Role) -> Bson {
73+
match role {
74+
Role::All(role) => Bson::String(role.to_string()),
75+
Role::Single { role, db } => {
76+
Bson::Document(doc! {
77+
"role" => (Bson::String(role.to_string())),
78+
"db" => (Bson::String(db))
79+
})
7780
}
7881
}
7982
}
83+
}
84+
85+
impl Role {
86+
pub fn to_bson(&self) -> Bson {
87+
self.clone().into()
88+
}
8089

90+
#[deprecated(since="0.2.4", note="this method will be removed in the next major release")]
8191
pub fn to_bson_array(vec: Vec<Role>) -> Bson {
8292
Bson::Array(vec.into_iter().map(|r| r.to_bson()).collect())
8393
}

src/gridfs/file.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -288,18 +288,18 @@ impl File {
288288
// Retrieves a binary file chunk and asynchronously pre-loads the next chunk.
289289
fn get_chunk(&mut self) -> Result<Vec<u8>> {
290290
let id = self.doc.id.clone();
291-
let chunk_num = self.chunk_num;
291+
let curr_chunk_num = self.chunk_num;
292292

293293
// Find the file chunk from the cache or from GridFS.
294294
let data = if let Some(lock) = self.rcache.take() {
295295
let cache = try!(lock.lock());
296-
if cache.n == chunk_num && cache.err.is_none() {
296+
if cache.n == curr_chunk_num && cache.err.is_none() {
297297
cache.data.clone()
298298
} else {
299-
try!(self.find_chunk(id, chunk_num))
299+
try!(self.find_chunk(id, curr_chunk_num))
300300
}
301301
} else {
302-
try!(self.find_chunk(id, chunk_num))
302+
try!(self.find_chunk(id, curr_chunk_num))
303303
};
304304

305305
self.chunk_num += 1;
@@ -311,7 +311,7 @@ impl File {
311311
let arc_cache = cache.clone();
312312
let arc_gfs = self.gfs.clone();
313313
let id = self.doc.id.clone();
314-
let chunk_num = self.chunk_num;
314+
let next_chunk_num = self.chunk_num;
315315

316316
thread::spawn(move || {
317317
let mut cache = match arc_cache.lock() {
@@ -323,7 +323,7 @@ impl File {
323323
};
324324

325325
let result = arc_gfs.chunks
326-
.find_one(Some(doc!{"files_id" => (id), "n" => (chunk_num)}), None);
326+
.find_one(Some(doc!{"files_id" => (id), "n" => (next_chunk_num)}), None);
327327

328328
match result {
329329
Ok(Some(doc)) => {
@@ -387,7 +387,7 @@ impl io::Write for File {
387387
self.wbuf.extend(part1.iter().cloned());
388388
data = part2;
389389

390-
let chunk_num = self.chunk_num;
390+
let curr_chunk_num = self.chunk_num;
391391
self.chunk_num += 1;
392392
self.wsum.input(buf);
393393

@@ -408,7 +408,7 @@ impl io::Write for File {
408408

409409
// Flush chunk to GridFS
410410
let chunk = self.wbuf.clone();
411-
try!(self.insert_chunk(chunk_num, &chunk));
411+
try!(self.insert_chunk(curr_chunk_num, &chunk));
412412
self.wbuf.clear();
413413
}
414414

@@ -417,7 +417,7 @@ impl io::Write for File {
417417
let size = cmp::min(chunk_size, data.len());
418418
let (part1, part2) = data.split_at(size);
419419

420-
let chunk_num = self.chunk_num;
420+
let curr_chunk_num = self.chunk_num;
421421
self.chunk_num += 1;
422422
self.wsum.input(buf);
423423

@@ -436,7 +436,7 @@ impl io::Write for File {
436436
}
437437
}
438438

439-
try!(self.insert_chunk(chunk_num, part1));
439+
try!(self.insert_chunk(curr_chunk_num, part1));
440440
data = part2;
441441
}
442442

@@ -521,7 +521,7 @@ impl io::Read for File {
521521
let mut new_rbuf = Vec::with_capacity(self.rbuf.len() - i);
522522
{
523523
let (_, p2) = self.rbuf.split_at(i);
524-
let b: Vec<u8> = p2.iter().cloned().collect();
524+
let b: Vec<u8> = p2.to_vec();
525525
new_rbuf.extend(b);
526526
}
527527

0 commit comments

Comments
 (0)