Skip to content

Commit e49e311

Browse files
committed
ref: Revert client scope API
1 parent b511816 commit e49e311

File tree

4 files changed

+32
-38
lines changed

4 files changed

+32
-38
lines changed

clients/rust/src/client.rs

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ use std::time::Duration;
44

55
use bytes::Bytes;
66
use futures_util::stream::BoxStream;
7-
use objectstore_types::ExpirationPolicy;
7+
use objectstore_types::{Compression, ExpirationPolicy, scope};
88
use url::Url;
99

10-
pub use objectstore_types::{Compression, scope as scope_types};
11-
1210
const USER_AGENT: &str = concat!("objectstore-client/", env!("CARGO_PKG_VERSION"));
1311

1412
#[derive(Debug)]
@@ -205,20 +203,20 @@ impl Usecase {
205203
}
206204

207205
/// Creates a new [`Scope`] tied to the given organization.
208-
pub fn for_organization(&self, organization: u64) -> crate::Result<Scope> {
206+
pub fn for_organization(&self, organization: u64) -> Scope {
209207
Scope::for_organization(self.clone(), organization)
210208
}
211209

212210
/// Creates a new [`Scope`] tied to the given organization and project.
213-
pub fn for_project(&self, organization: u64, project: u64) -> crate::Result<Scope> {
211+
pub fn for_project(&self, organization: u64, project: u64) -> Scope {
214212
Scope::for_project(self.clone(), organization, project)
215213
}
216214
}
217215

218216
#[derive(Debug)]
219217
pub(crate) struct ScopeInner {
220218
usecase: Usecase,
221-
scopes: scope_types::Scopes,
219+
scopes: scope::Scopes,
222220
}
223221

224222
impl ScopeInner {
@@ -260,28 +258,23 @@ impl Scope {
260258
pub fn new(usecase: Usecase) -> Self {
261259
Self(Ok(ScopeInner {
262260
usecase,
263-
scopes: scope_types::Scopes::empty(),
261+
scopes: scope::Scopes::empty(),
264262
}))
265263
}
266264

267-
fn for_organization(usecase: Usecase, organization: u64) -> crate::Result<Self> {
268-
let scopes = scope_types::Scopes::from_iter([scope_types::Scope::create(
269-
"org",
270-
&organization.to_string(),
271-
)?]);
272-
Ok(Self(Ok(ScopeInner { usecase, scopes })))
265+
fn for_organization(usecase: Usecase, organization: u64) -> Self {
266+
Self::new(usecase).push("org", organization)
273267
}
274268

275-
fn for_project(usecase: Usecase, organization: u64, project: u64) -> crate::Result<Self> {
276-
let scopes = scope_types::Scopes::from_iter([
277-
scope_types::Scope::create("org", &organization.to_string())?,
278-
scope_types::Scope::create("project", &project.to_string())?,
279-
]);
280-
Ok(Self(Ok(ScopeInner { usecase, scopes })))
269+
fn for_project(usecase: Usecase, organization: u64, project: u64) -> Self {
270+
Self::for_organization(usecase, organization).push("project", project)
281271
}
282272

283273
/// Extends this Scope by creating a new sub-scope nested within it.
284-
pub fn push(self, key: &str, value: &str) -> Self {
274+
pub fn push<V>(self, key: &str, value: V) -> Self
275+
where
276+
V: std::fmt::Display,
277+
{
285278
let result = self.0.and_then(|mut inner| {
286279
inner.scopes.push(key, value)?;
287280
Ok(inner)
@@ -434,7 +427,6 @@ mod tests {
434427
let usecase = Usecase::new("testing");
435428
let scope = usecase
436429
.for_project(12345, 1337)
437-
.unwrap()
438430
.push("app_slug", "email_app");
439431
let session = client.session(scope).unwrap();
440432

@@ -448,7 +440,7 @@ mod tests {
448440
fn test_object_url_with_base_path() {
449441
let client = Client::new("http://127.0.0.1:8888/api/prefix").unwrap();
450442
let usecase = Usecase::new("testing");
451-
let scope = usecase.for_project(12345, 1337).unwrap();
443+
let scope = usecase.for_project(12345, 1337);
452444
let session = client.session(scope).unwrap();
453445

454446
assert_eq!(

clients/rust/tests/e2e.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ async fn stores_uncompressed() {
88

99
let client = Client::builder(server.url("/")).build().unwrap();
1010
let usecase = Usecase::new("usecase");
11-
let scope = usecase.for_organization(12345).unwrap();
12-
let session = client.session(scope).unwrap();
11+
let session = client.session(usecase.for_organization(12345)).unwrap();
1312

1413
let body = "oh hai!";
1514

@@ -35,8 +34,7 @@ async fn uses_zstd_by_default() {
3534

3635
let client = Client::builder(server.url("/")).build().unwrap();
3736
let usecase = Usecase::new("usecase");
38-
let scope = usecase.for_organization(12345).unwrap();
39-
let session = client.session(scope).unwrap();
37+
let session = client.session(usecase.for_organization(12345)).unwrap();
4038

4139
let body = "oh hai!";
4240
let stored_id = session.put(body).send().await.unwrap().key;
@@ -64,8 +62,7 @@ async fn deletes_stores_stuff() {
6462

6563
let client = Client::builder(server.url("/")).build().unwrap();
6664
let usecase = Usecase::new("usecase");
67-
let scope = usecase.for_project(12345, 1337).unwrap();
68-
let session = client.session(scope).unwrap();
65+
let session = client.session(usecase.for_project(12345, 1337)).unwrap();
6966

7067
let body = "oh hai!";
7168
let stored_id = session.put(body).send().await.unwrap().key;
@@ -82,8 +79,7 @@ async fn stores_under_given_key() {
8279

8380
let client = Client::builder(server.url("/")).build().unwrap();
8481
let usecase = Usecase::new("usecase");
85-
let scope = usecase.for_project(12345, 1337).unwrap();
86-
let session = client.session(scope).unwrap();
82+
let session = client.session(usecase.for_project(12345, 1337)).unwrap();
8783

8884
let body = "oh hai!";
8985
let request = session.put(body).key("test-key123!!");
@@ -98,8 +94,7 @@ async fn overwrites_existing_key() {
9894

9995
let client = Client::builder(server.url("/")).build().unwrap();
10096
let usecase = Usecase::new("usecase");
101-
let scope = usecase.for_project(12345, 1337).unwrap();
102-
let session = client.session(scope).unwrap();
97+
let session = client.session(usecase.for_project(12345, 1337)).unwrap();
10398

10499
let stored_id = session.put("initial body").send().await.unwrap().key;
105100
let request = session.put("new body").key(&stored_id);

objectstore-types/src/scope.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,18 @@ impl Scope {
3838
/// let invalid_scope = Scope::create("", "value");
3939
/// assert!(invalid_scope.is_err());
4040
/// ```
41-
pub fn create(name: &str, value: &str) -> Result<Self, InvalidScopeError> {
41+
pub fn create<V>(name: &str, value: V) -> Result<Self, InvalidScopeError>
42+
where
43+
V: std::fmt::Display,
44+
{
45+
let value = value.to_string();
4246
if name.is_empty() || value.is_empty() {
4347
return Err(InvalidScopeError);
4448
}
4549

4650
Ok(Self {
4751
name: name.to_owned(),
48-
value: value.to_owned(),
52+
value,
4953
})
5054
}
5155

@@ -100,7 +104,10 @@ impl Scopes {
100104
}
101105

102106
/// Pushes a new scope to the collection.
103-
pub fn push(&mut self, key: &str, value: &str) -> Result<(), InvalidScopeError> {
107+
pub fn push<V>(&mut self, key: &str, value: V) -> Result<(), InvalidScopeError>
108+
where
109+
V: std::fmt::Display,
110+
{
104111
self.scopes.push(Scope::create(key, value)?);
105112
Ok(())
106113
}

stresstest/src/http.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ impl HttpRemote {
8484
fn session(&self, usecase: &Usecase, organization_id: u64) -> Session {
8585
// NB: Reuse the organization ID as project ID to create unique projects. Right now, we do
8686
// not benefit from simulating multiple projects per org.
87-
let scope = usecase
87+
usecase
8888
.for_project(organization_id, organization_id)
89-
.unwrap();
90-
self.client.session(scope).unwrap()
89+
.session(&self.client)
90+
.unwrap()
9191
}
9292
}

0 commit comments

Comments
 (0)