Skip to content

Commit 03587e3

Browse files
committed
GetUser::into_future
1 parent 7226ec0 commit 03587e3

File tree

4 files changed

+45
-30
lines changed

4 files changed

+45
-30
lines changed

sdk/data_cosmos/examples/user_00.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
3939

4040
println!("list_users_response == {:#?}", users);
4141

42-
let get_user_response = user_client
43-
.get_user(Context::new(), GetUserOptions::new())
44-
.await?;
42+
let get_user_response = user_client.get_user().into_future().await?;
4543
println!("get_user_response == {:#?}", get_user_response);
4644

4745
let new_user = format!("{}replaced", user_name);

sdk/data_cosmos/src/clients/user_client.rs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,8 @@ impl UserClient {
4444
}
4545

4646
/// Get the user
47-
pub async fn get_user(
48-
&self,
49-
ctx: Context,
50-
options: GetUserOptions,
51-
) -> crate::Result<UserResponse> {
52-
let mut request = self.prepare_request_with_user_name(http::Method::GET);
53-
54-
options.decorate_request(&mut request)?;
55-
let response = self
56-
.pipeline()
57-
.send(ctx.clone().insert(ResourceType::Users), &mut request)
58-
.await?;
59-
60-
Ok(UserResponse::try_from(response).await?)
47+
pub fn get_user(&self) -> GetUserBuilder {
48+
GetUserBuilder::new(self.clone())
6149
}
6250

6351
/// Replace the user
Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,57 @@
1-
use crate::prelude::*;
2-
use azure_core::Request as HttpRequest;
1+
use crate::{prelude::*, resources::user::UserResponse};
2+
use azure_core::Context;
33

4-
#[derive(Debug, Clone, Default)]
5-
pub struct GetUserOptions {
4+
#[derive(Debug, Clone)]
5+
pub struct GetUserBuilder {
6+
client: UserClient,
67
consistency_level: Option<ConsistencyLevel>,
8+
context: Context,
79
}
810

9-
impl GetUserOptions {
10-
pub fn new() -> Self {
11+
impl GetUserBuilder {
12+
pub fn new(client: UserClient) -> Self {
1113
Self {
14+
client,
1215
consistency_level: None,
16+
context: Context::new(),
1317
}
1418
}
1519

1620
setters! {
1721
consistency_level: ConsistencyLevel => Some(consistency_level),
22+
context: Context => context,
1823
}
1924

20-
pub(crate) fn decorate_request(&self, request: &mut HttpRequest) -> crate::Result<()> {
21-
azure_core::headers::add_optional_header2(&self.consistency_level, request)?;
22-
request.set_body(bytes::Bytes::from_static(&[]).into());
25+
pub fn into_future(self) -> GetUser {
26+
Box::pin(async move {
27+
let mut request = self
28+
.client
29+
.prepare_request_with_user_name(http::Method::GET);
2330

24-
Ok(())
31+
azure_core::headers::add_optional_header2(&self.consistency_level, &mut request)?;
32+
request.set_body(bytes::Bytes::from_static(&[]).into());
33+
let response = self
34+
.client
35+
.pipeline()
36+
.send(
37+
self.context.clone().insert(ResourceType::Users),
38+
&mut request,
39+
)
40+
.await?;
41+
42+
UserResponse::try_from(response).await
43+
})
44+
}
45+
}
46+
47+
/// The future returned by calling `into_future` on the builder.
48+
pub type GetUser = futures::future::BoxFuture<'static, crate::Result<UserResponse>>;
49+
50+
#[cfg(feature = "into_future")]
51+
impl std::future::IntoFuture for GetUserBuilder {
52+
type Future = GetUser;
53+
type Output = <GetUser as std::future::Future>::Output;
54+
fn into_future(self) -> Self::Future {
55+
Self::into_future(self)
2556
}
2657
}

sdk/data_cosmos/tests/user.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ async fn users() {
4343

4444
assert_eq!(list_users_response.users.len(), 1);
4545

46-
let get_user_response = user_client
47-
.get_user(Context::new(), GetUserOptions::new())
48-
.await;
46+
let get_user_response = user_client.get_user().into_future().await;
4947
assert!(get_user_response.is_ok());
5048
let retrieved_user = get_user_response.unwrap();
5149
assert_eq!(retrieved_user.user.id, USER_NAME);

0 commit comments

Comments
 (0)