Skip to content

Commit 9ef3ada

Browse files
authored
RUST-1421 Implement FromStr for Namespace (#889)
* RUST-1421 Implement FromStr for Namespace
1 parent d9490a2 commit 9ef3ada

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/coll/mod.rs

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
pub mod options;
22

3-
use std::{borrow::Borrow, collections::HashSet, fmt, fmt::Debug, sync::Arc};
3+
use std::{borrow::Borrow, collections::HashSet, fmt, fmt::Debug, str::FromStr, sync::Arc};
44

55
use futures_util::{
66
future,
@@ -1501,3 +1501,23 @@ impl Serialize for Namespace {
15011501
serializer.serialize_str(&(self.db.clone() + "." + &self.coll))
15021502
}
15031503
}
1504+
1505+
impl FromStr for Namespace {
1506+
type Err = Error;
1507+
fn from_str(s: &str) -> Result<Self> {
1508+
let mut parts = s.split('.');
1509+
1510+
let db = parts.next();
1511+
let coll = parts.collect::<Vec<_>>().join(".");
1512+
1513+
match (db, coll) {
1514+
(Some(db), coll) if !coll.is_empty() => Ok(Self {
1515+
db: db.to_string(),
1516+
coll,
1517+
}),
1518+
_ => Err(Self::Err::invalid_argument(
1519+
"Missing one or more fields in namespace",
1520+
)),
1521+
}
1522+
}
1523+
}

src/test/coll.rs

+13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::{fmt::Debug, time::Duration};
22

3+
use crate::Namespace;
34
use futures::stream::{StreamExt, TryStreamExt};
45
use lazy_static::lazy_static;
56
use semver::VersionReq;
@@ -1201,3 +1202,15 @@ fn assert_duplicate_key_error_with_utf8_replacement(error: &ErrorKind) {
12011202
),
12021203
}
12031204
}
1205+
1206+
#[test]
1207+
fn test_namespace_fromstr() {
1208+
let t: Namespace = "something.somethingelse".parse().unwrap();
1209+
assert_eq!(t.db, "something");
1210+
assert_eq!(t.coll, "somethingelse");
1211+
let t2: Result<Namespace> = "blahblah".parse();
1212+
assert!(t2.is_err());
1213+
let t: Namespace = "something.something.else".parse().unwrap();
1214+
assert_eq!(t.db, "something");
1215+
assert_eq!(t.coll, "something.else");
1216+
}

0 commit comments

Comments
 (0)