Skip to content

Commit 42f8996

Browse files
authored
switch Method and StatusCode to http-types (#860)
1 parent 1a49eed commit 42f8996

File tree

1,149 files changed

+127507
-127723
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,149 files changed

+127507
-127723
lines changed

sdk/core/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ bytes = "1.0"
1919
chrono = "0.4"
2020
dyn-clone = "1.0"
2121
futures = "0.3"
22-
http = "0.2"
22+
http-types = "2.12"
2323
log = "0.4"
2424
rand = "0.8"
2525
reqwest = { version = "0.11", features = [

sdk/core/src/error/http_error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ impl HttpError {
2626
let body = response.into_body().await;
2727
error_code = error_code.or_else(|| get_error_code_from_body(&body));
2828
HttpError {
29-
status: status.as_u16(),
29+
status: status as u16,
3030
headers,
3131
error_code,
3232
body,

sdk/core/src/http_client/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ pub trait HttpClient: Send + Sync + std::fmt::Debug {
3737
let rsp = self.execute_request(request).await?;
3838
let (status, headers, body) = rsp.deconstruct();
3939
let body = crate::collect_pinned_stream(body).await?;
40-
let status_u16 = status.as_u16();
40+
let status_u16 = status as u16;
4141
if !(200..400).contains(&status_u16) {
4242
return Err(ErrorKind::http_response_from_body(status_u16, &body).into_error());
4343
}

sdk/core/src/http_client/reqwest.rs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use super::*;
2-
use std::collections::HashMap;
2+
use std::{collections::HashMap, str::FromStr};
33

44
/// Construct a new `HttpClient` with the `reqwest` backend.
55
pub fn new_http_client() -> std::sync::Arc<dyn HttpClient> {
@@ -10,7 +10,7 @@ pub fn new_http_client() -> std::sync::Arc<dyn HttpClient> {
1010
impl HttpClient for ::reqwest::Client {
1111
async fn execute_request(&self, request: &crate::Request) -> crate::Result<crate::Response> {
1212
let url = request.url().clone();
13-
let mut req = self.request(request.method().clone(), url);
13+
let mut req = self.request(try_from_method(request.method())?, url);
1414
for (name, value) in request.headers().iter() {
1515
req = req.header(name.as_str(), value.as_str());
1616
}
@@ -42,7 +42,11 @@ impl HttpClient for ::reqwest::Client {
4242
)
4343
}));
4444

45-
Ok(crate::Response::new(status, headers, body))
45+
Ok(crate::Response::new(
46+
try_from_status(status)?,
47+
headers,
48+
body,
49+
))
4650
}
4751
}
4852

@@ -65,3 +69,27 @@ fn to_headers(map: &::reqwest::header::HeaderMap) -> crate::Result<crate::header
6569
.collect::<HashMap<_, _>>();
6670
Ok(crate::headers::Headers::from(map))
6771
}
72+
73+
fn try_from_method(method: &crate::Method) -> crate::Result<::reqwest::Method> {
74+
match method {
75+
crate::Method::Connect => Ok(::reqwest::Method::CONNECT),
76+
crate::Method::Delete => Ok(::reqwest::Method::DELETE),
77+
crate::Method::Get => Ok(::reqwest::Method::GET),
78+
crate::Method::Head => Ok(::reqwest::Method::HEAD),
79+
crate::Method::Options => Ok(::reqwest::Method::OPTIONS),
80+
crate::Method::Patch => Ok(::reqwest::Method::PATCH),
81+
crate::Method::Post => Ok(::reqwest::Method::POST),
82+
crate::Method::Put => Ok(::reqwest::Method::PUT),
83+
crate::Method::Trace => Ok(::reqwest::Method::TRACE),
84+
_ => ::reqwest::Method::from_str(method.as_ref()).map_kind(ErrorKind::DataConversion),
85+
}
86+
}
87+
88+
fn try_from_status(status: ::reqwest::StatusCode) -> crate::Result<crate::StatusCode> {
89+
let status = u16::from(status);
90+
crate::StatusCode::try_from(status).map_err(|_| {
91+
Error::with_message(ErrorKind::DataConversion, || {
92+
format!("invalid status code {status}")
93+
})
94+
})
95+
}

sdk/core/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ pub use seekable_stream::*;
5858
pub use sleep::sleep;
5959

6060
// re-export important types at crate level
61-
pub use http::Method;
62-
pub use http::StatusCode;
61+
pub use http_types::Method;
62+
pub use http_types::StatusCode;
6363
pub use url::Url;
6464

6565
/// A unique identifier for a request.

sdk/core/src/mock/mock_response.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ impl<'de> Deserialize<'de> for MockResponse {
7070
headers.insert(name, value);
7171
}
7272
let body = Bytes::from(base64::decode(r.body).map_err(Error::custom)?);
73-
let status = StatusCode::from_u16(r.status).map_err(Error::custom)?;
73+
let status = StatusCode::try_from(r.status)
74+
.map_err(|_| Error::custom(format!("invalid status code {}", r.status)))?;
7475

7576
Ok(Self::new(status, headers, body))
7677
}
@@ -85,7 +86,7 @@ impl Serialize for MockResponse {
8586
for (h, v) in self.headers.iter() {
8687
headers.insert(h.as_str().into(), v.as_str().into());
8788
}
88-
let status = self.status.as_u16();
89+
let status = self.status as u16;
8990
let body = base64::encode(&self.body as &[u8]);
9091
let s = SerializedMockResponse {
9192
status,

sdk/core/src/policies/retry_policies/retry_policy.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ pub trait RetryPolicy {
2424
///
2525
/// On all other 4xx and 5xx status codes no retry is attempted.
2626
const RETRY_STATUSES: &[StatusCode] = &[
27-
StatusCode::REQUEST_TIMEOUT,
28-
StatusCode::TOO_MANY_REQUESTS,
29-
StatusCode::INTERNAL_SERVER_ERROR,
30-
StatusCode::BAD_GATEWAY,
31-
StatusCode::SERVICE_UNAVAILABLE,
32-
StatusCode::GATEWAY_TIMEOUT,
27+
StatusCode::RequestTimeout,
28+
StatusCode::TooManyRequests,
29+
StatusCode::InternalServerError,
30+
StatusCode::BadGateway,
31+
StatusCode::ServiceUnavailable,
32+
StatusCode::GatewayTimeout,
3333
];
3434

3535
#[async_trait::async_trait]
@@ -48,7 +48,7 @@ where
4848

4949
loop {
5050
let error = match next[0].send(ctx, request, &next[1..]).await {
51-
Ok(response) if (200..400).contains(&response.status().as_u16()) => {
51+
Ok(response) if (200..400).contains(&u16::from(response.status())) => {
5252
log::trace!(
5353
"Succesful response. Request={:?} response={:?}",
5454
request,
@@ -59,12 +59,16 @@ where
5959
}
6060
Ok(response) => {
6161
// Error status code
62-
let code = response.status().as_u16();
62+
let code = response.status() as u16;
6363

6464
let http_error = HttpError::new(response).await;
6565
// status code should already be parsed as valid from the underlying HTTP
6666
// implementations.
67-
let status = StatusCode::from_u16(code).expect("invalid status code");
67+
let status = StatusCode::try_from(code).map_err(|_| {
68+
Error::with_message(ErrorKind::DataConversion, || {
69+
format!("invalid status code '{code}'")
70+
})
71+
})?;
6872
let error = Error::full(
6973
ErrorKind::http_response(
7074
code,

sdk/data_cosmos/src/authorization_policy.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -191,15 +191,15 @@ fn string_to_sign(
191191
format!(
192192
"{}\n{}\n{}\n{}\n\n",
193193
match *http_method {
194-
azure_core::Method::GET => "get",
195-
azure_core::Method::PUT => "put",
196-
azure_core::Method::POST => "post",
197-
azure_core::Method::DELETE => "delete",
198-
azure_core::Method::HEAD => "head",
199-
azure_core::Method::TRACE => "trace",
200-
azure_core::Method::OPTIONS => "options",
201-
azure_core::Method::CONNECT => "connect",
202-
azure_core::Method::PATCH => "patch",
194+
azure_core::Method::Get => "get",
195+
azure_core::Method::Put => "put",
196+
azure_core::Method::Post => "post",
197+
azure_core::Method::Delete => "delete",
198+
azure_core::Method::Head => "head",
199+
azure_core::Method::Trace => "trace",
200+
azure_core::Method::Options => "options",
201+
azure_core::Method::Connect => "connect",
202+
azure_core::Method::Patch => "patch",
203203
_ => "extension",
204204
},
205205
match rt {
@@ -242,7 +242,7 @@ mod tests {
242242
let time = time.with_timezone(&chrono::Utc).into();
243243

244244
let ret = string_to_sign(
245-
&azure_core::Method::GET,
245+
&azure_core::Method::Get,
246246
&ResourceType::Databases,
247247
"dbs/MyDatabase/colls/MyCollection",
248248
time,
@@ -271,7 +271,7 @@ mon, 01 jan 1900 01:00:00 gmt
271271

272272
let ret = generate_authorization(
273273
&auth_token,
274-
&azure_core::Method::GET,
274+
&azure_core::Method::Get,
275275
&ResourceType::Databases,
276276
"dbs/MyDatabase/colls/MyCollection",
277277
time,
@@ -295,7 +295,7 @@ mon, 01 jan 1900 01:00:00 gmt
295295

296296
let ret = generate_authorization(
297297
&auth_token,
298-
&azure_core::Method::GET,
298+
&azure_core::Method::Get,
299299
&ResourceType::Databases,
300300
"dbs/ToDoList",
301301
time,
@@ -316,7 +316,7 @@ mon, 01 jan 1900 01:00:00 gmt
316316
fn generate_resource_link_00() {
317317
let request = Request::new(
318318
reqwest::Url::parse("https://.documents.azure.com/dbs/second").unwrap(),
319-
azure_core::Method::GET,
319+
azure_core::Method::Get,
320320
);
321321
assert_eq!(&generate_resource_link(&request), "dbs/second");
322322
}
@@ -325,7 +325,7 @@ mon, 01 jan 1900 01:00:00 gmt
325325
fn generate_resource_link_01() {
326326
let request = Request::new(
327327
reqwest::Url::parse("https://.documents.azure.com/dbs").unwrap(),
328-
azure_core::Method::GET,
328+
azure_core::Method::Get,
329329
);
330330
assert_eq!(&generate_resource_link(&request), "");
331331
}
@@ -334,7 +334,7 @@ mon, 01 jan 1900 01:00:00 gmt
334334
fn generate_resource_link_02() {
335335
let request = Request::new(
336336
reqwest::Url::parse("https://.documents.azure.com/colls/second/third").unwrap(),
337-
azure_core::Method::GET,
337+
azure_core::Method::Get,
338338
);
339339
assert_eq!(&generate_resource_link(&request), "colls/second/third");
340340
}
@@ -343,7 +343,7 @@ mon, 01 jan 1900 01:00:00 gmt
343343
fn generate_resource_link_03() {
344344
let request = Request::new(
345345
reqwest::Url::parse("https://.documents.azure.com/dbs/test_db/colls").unwrap(),
346-
azure_core::Method::GET,
346+
azure_core::Method::Get,
347347
);
348348
assert_eq!(&generate_resource_link(&request), "dbs/test_db");
349349
}

sdk/data_cosmos/src/clients/cosmos.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ impl CosmosOptions {
182182
/// Create new options with a given transaction name
183183
pub fn new_with_transaction_name(name: String) -> Self {
184184
Self {
185-
options: ClientOptions::new_with_transaction_name(name.into()),
185+
options: ClientOptions::new_with_transaction_name(name),
186186
}
187187
}
188188
}

sdk/data_cosmos/src/operations/create_collection.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ impl CreateCollectionBuilder {
4242

4343
pub fn into_future(self) -> CreateCollection {
4444
Box::pin(async move {
45-
let mut request = self.client.collections_request(azure_core::Method::POST);
45+
let mut request = self.client.collections_request(azure_core::Method::Post);
4646
request.insert_headers(&self.offer);
4747
if let Some(cl) = &self.consistency_level {
4848
request.insert_headers(cl);

sdk/data_cosmos/src/operations/create_database.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ impl CreateDatabaseBuilder {
3636

3737
pub fn into_future(self) -> CreateDatabase {
3838
Box::pin(async move {
39-
let mut request = self.client.request("dbs", azure_core::Method::POST);
39+
let mut request = self.client.request("dbs", azure_core::Method::Post);
4040

4141
let body = CreateDatabaseBody {
4242
id: self.database_name.as_str(),

sdk/data_cosmos/src/operations/create_document.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ impl<D: Serialize + CosmosEntity + Send + 'static> CreateDocumentBuilder<D> {
6464
Some(s) => s,
6565
None => serialize_partition_key(&document.partition_key())?,
6666
};
67-
let mut request = self.client.docs_request(azure_core::Method::POST);
67+
let mut request = self.client.docs_request(azure_core::Method::Post);
6868

6969
add_as_partition_key_header_serialized(&partition_key, &mut request);
7070
request.insert_headers(&self.if_match_condition);
@@ -141,7 +141,7 @@ impl CreateDocumentResponse {
141141
let body = collect_pinned_stream(pinned_stream).await?;
142142

143143
Ok(CreateDocumentResponse {
144-
is_update: status_code == StatusCode::OK,
144+
is_update: status_code == StatusCode::Ok,
145145

146146
last_state_change: last_state_change_from_headers(&headers)?,
147147
etag: etag_from_headers(&headers)?,

sdk/data_cosmos/src/operations/create_or_replace_attachment.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ impl CreateOrReplaceAttachmentBuilder {
4343
pub fn into_future(self) -> CreateOrReplaceAttachment {
4444
Box::pin(async move {
4545
let mut req = if self.is_create {
46-
self.client.attachments_request(azure_core::Method::POST)
46+
self.client.attachments_request(azure_core::Method::Post)
4747
} else {
48-
self.client.attachment_request(azure_core::Method::PUT)
48+
self.client.attachment_request(azure_core::Method::Put)
4949
};
5050

5151
if let Some(cl) = &self.consistency_level {

sdk/data_cosmos/src/operations/create_or_replace_slug_attachment.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ impl CreateOrReplaceSlugAttachmentBuilder {
4949
pub fn into_future(self) -> CreateOrReplaceSlugAttachment {
5050
Box::pin(async move {
5151
let mut request = if self.is_create {
52-
self.client.attachments_request(Method::POST)
52+
self.client.attachments_request(Method::Post)
5353
} else {
54-
self.client.attachment_request(Method::PUT)
54+
self.client.attachment_request(Method::Put)
5555
};
5656

5757
request.insert_headers(&self.if_match_condition);

sdk/data_cosmos/src/operations/create_or_replace_trigger.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ impl CreateOrReplaceTriggerBuilder {
4747
pub fn into_future(self) -> CreateOrReplaceTrigger {
4848
Box::pin(async move {
4949
let mut request = if self.is_create {
50-
self.client.triggers_request(azure_core::Method::POST)
50+
self.client.triggers_request(azure_core::Method::Post)
5151
} else {
52-
self.client.trigger_request(azure_core::Method::PUT)
52+
self.client.trigger_request(azure_core::Method::Put)
5353
};
5454

5555
if let Some(cl) = &self.consistency_level {

sdk/data_cosmos/src/operations/create_or_replace_user_defined_function.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ impl CreateOrReplaceUserDefinedFunctionBuilder {
3636
pub fn into_future(self) -> CreateOrReplaceUserDefinedFunction {
3737
Box::pin(async move {
3838
let mut request = match self.is_create {
39-
true => self.client.udfs_request(azure_core::Method::POST),
40-
false => self.client.udf_request(azure_core::Method::PUT),
39+
true => self.client.udfs_request(azure_core::Method::Post),
40+
false => self.client.udf_request(azure_core::Method::Put),
4141
};
4242

4343
if let Some(cl) = &self.consistency_level {

sdk/data_cosmos/src/operations/create_permission.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ impl CreatePermissionBuilder {
3737
self.client.database_client().database_name(),
3838
self.client.user_client().user_name()
3939
),
40-
azure_core::Method::POST,
40+
azure_core::Method::Post,
4141
);
4242

4343
if let Some(cl) = &self.consistency_level {

sdk/data_cosmos/src/operations/create_stored_procedure.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ impl CreateStoredProcedureBuilder {
3333
Box::pin(async move {
3434
let mut req = self
3535
.client
36-
.stored_procedures_request(azure_core::Method::POST);
36+
.stored_procedures_request(azure_core::Method::Post);
3737

3838
if let Some(cl) = &self.consistency_level {
3939
req.insert_headers(cl);

sdk/data_cosmos/src/operations/create_user.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ impl CreateUserBuilder {
2929
"dbs/{}/users",
3030
self.client.database_client().database_name()
3131
),
32-
azure_core::Method::POST,
32+
azure_core::Method::Post,
3333
);
3434

3535
if let Some(cl) = &self.consistency_level {

sdk/data_cosmos/src/operations/delete_attachment.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ impl DeleteAttachmentBuilder {
3434

3535
pub fn into_future(self) -> DeleteAttachment {
3636
Box::pin(async move {
37-
let mut request = self.client.attachment_request(azure_core::Method::DELETE);
37+
let mut request = self.client.attachment_request(azure_core::Method::Delete);
3838

3939
request.insert_headers(&self.if_match_condition);
4040
if let Some(cl) = &self.consistency_level {

sdk/data_cosmos/src/operations/delete_collection.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ impl DeleteCollectionBuilder {
2727

2828
pub fn into_future(self) -> DeleteCollection {
2929
Box::pin(async move {
30-
let mut request = self.client.collection_request(azure_core::Method::DELETE);
30+
let mut request = self.client.collection_request(azure_core::Method::Delete);
3131

3232
if let Some(cl) = &self.consistency_level {
3333
request.insert_headers(cl);

sdk/data_cosmos/src/operations/delete_database.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ impl DeleteDatabaseBuilder {
2828

2929
pub fn into_future(self) -> DeleteDatabase {
3030
Box::pin(async move {
31-
let mut request = self.client.database_request(azure_core::Method::DELETE);
31+
let mut request = self.client.database_request(azure_core::Method::Delete);
3232
if let Some(cl) = &self.consistency_level {
3333
request.insert_headers(cl);
3434
}

0 commit comments

Comments
 (0)