Skip to content

Commit 8d8cffe

Browse files
authored
RUST-589 Implement FromStr for ObjectId (#215)
1 parent e31ecd4 commit 8d8cffe

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/oid.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::{
55
error,
66
fmt,
77
result,
8+
str::FromStr,
89
sync::atomic::{AtomicUsize, Ordering},
910
time::SystemTime,
1011
};
@@ -79,6 +80,14 @@ impl Default for ObjectId {
7980
}
8081
}
8182

83+
impl FromStr for ObjectId {
84+
type Err = Error;
85+
86+
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
87+
Self::with_string(s)
88+
}
89+
}
90+
8291
impl ObjectId {
8392
/// Generates a new ObjectID, represented in bytes.
8493
/// See the [docs](http://docs.mongodb.org/manual/reference/object-id/)

src/tests/modules/oid.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,13 @@ fn counter_increasing() {
4747
let oid2_bytes = ObjectId::new().bytes();
4848
assert!(oid1_bytes[11] < oid2_bytes[11]);
4949
}
50+
51+
#[test]
52+
fn fromstr_oid() {
53+
let _guard = LOCK.run_concurrently();
54+
let s = "123456789012123456789012";
55+
let oid_res = s.parse::<ObjectId>();
56+
assert!(oid_res.is_ok(), "oid parse failed");
57+
let actual_s = hex::encode(oid_res.unwrap().bytes());
58+
assert_eq!(s, &actual_s, "parsed and expected oids differ");
59+
}

0 commit comments

Comments
 (0)