Skip to content

Commit 5c7ded2

Browse files
authored
Rename async response types, into_body to into_model (#3295)
Resolves #3288. Read that issue for full details or CHANGELOGs herein.
1 parent 7f2ccaf commit 5c7ded2

File tree

91 files changed

+439
-408
lines changed

Some content is hidden

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

91 files changed

+439
-408
lines changed

.github/instructions/changelog.instructions.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ applyTo: "**/CHANGELOG.md"
88
- Do not create new category headers; use only those already present in the file.
99
- Ensure all entries are concise, accurate, and relevant to the release.
1010
- Follow the existing formatting and style conventions of the file.
11+
- Changes in `sdk/core/typespec/CHANGELOG.md` should be reflected in `sdk/core/typespec_client_core/CHANGELOG.md`.
12+
- Changes in `sdk/core/typespec_client_core/CHANGELOG.md` should be reflected in `sdk/core/azure_core/CHANGELOG.md`.

eng/scripts/verify-dependencies.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ static EXEMPTIONS: &[(&str, &str)] = &[
3333
"azure_messaging_eventhubs_checkpointstore_blob",
3434
"opentelemetry-appender-tracing",
3535
),
36+
("azure_data_cosmos_native", "cbindgen"),
3637
];
3738

3839
fn main() {

sdk/core/azure_core/CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
### Features Added
66

77
- Added `ItemIterator::continuation_token()` and `with_continuation_token()` to resume paging items. The current page is restarted until _after_ all items have been iterated.
8-
- Added `Response::to_raw_response()` function to create a `RawResponse` from cloned data.
8+
- Added `PipelineOptions::retry_status_codes` for configuring which status codes should trigger a retry.
9+
- Added `Response<T, F>::body(&self) -> &ResponseBody`.
10+
- Added `Response<T, F>::to_raw_response()` function to create a `RawResponse` from cloned data.
911
- Added `UrlExt::append_path()`.
1012
- Implemented `IntoFuture` for a `Poller`. Call `await` on a Poller to get the final model, or `into_stream()` to get a `futures::Stream` to poll the operation manually.
1113
- Re-exported `serde_json::Value` as `azure_core::Value` ([#1687](https://github.com/Azure/azure-sdk-for-rust/issues/1687))
@@ -24,6 +26,9 @@
2426
- Removed `Poller::wait()` function. Call `await` on a `Poller` to wait for it to complete and, upon success, return the final model.
2527
- Removed `xml::read_xml_str()`.
2628
- Renamed `BearerTokenCredentialPolicy` to `BearerTokenAuthorizationPolicy`.
29+
- Renamed `BufResponse` to `AsyncRawResponse` so that `AsyncRawResponse` is to `RawResponse` as `AsyncIterator` is to `Iterator`.
30+
- Renamed `BufResponseBody` to `AsyncResponseBody` so that `AsyncResponseBody` is to `ResponseBody` as `AsyncIterator` is to `Iterator`.
31+
- Renamed `Response<T, F>::into_body(self) -> Result<Response<T>>` to `into_model(self) -> Result<Response<T>>`. `into_body(self)` now returns a `ResponseBody`.
2732
- Renamed `RetryPolicy::get_retry_headers()` to `RetryPolicy::retry_headers()`
2833
- Renamed `xml::read_xml()` to `xml::from_xml()` congruent with `json::from_json()`.
2934

sdk/core/azure_core/README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
158158
let response = client.get_secret("secret-name", None).await?;
159159

160160
// Response<T> has two main accessors:
161-
// 1. The `into_body()` function consumes self to deserialize into a model type
162-
let secret = response.into_body()?;
161+
// 1. The `into_model()` function consumes self to deserialize into a model type
162+
let secret = response.into_model()?;
163163

164164
// get response again because it was moved in above statement
165165
let response: Response<Secret> = client.get_secret("secret-name", None).await?;
@@ -199,7 +199,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
199199
)?;
200200

201201
match client.get_secret("secret-name", None).await {
202-
Ok(secret) => println!("Secret: {:?}", secret.into_body()?.value),
202+
Ok(secret) => println!("Secret: {:?}", secret.into_model()?.value),
203203
Err(e) => match e.kind() {
204204
ErrorKind::HttpResponse { status, error_code, .. } if *status == StatusCode::NotFound => {
205205
// handle not found error
@@ -276,7 +276,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
276276

277277
// poll the pager until there are no more SecretListResults
278278
while let Some(secrets) = pager.try_next().await? {
279-
let secrets = secrets.into_body()?.value;
279+
let secrets = secrets.into_model()?.value;
280280
// loop through secrets in SecretsListResults
281281
for secret in secrets {
282282
// get the secret name from the ID
@@ -332,7 +332,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
332332
let certificate = client
333333
.create_certificate("certificate-name", body.try_into()?, None)?
334334
.await?
335-
.into_body()?;
335+
.into_model()?;
336336

337337
Ok(())
338338
}
@@ -378,7 +378,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
378378
// The Poller implements futures::Stream and automatically waits between polls.
379379
let mut poller = client.create_certificate("certificate-name", body.try_into()?, None)?;
380380
while let Some(operation) = poller.try_next().await? {
381-
let operation = operation.into_body()?;
381+
let operation = operation.into_model()?;
382382
match operation.status.as_deref().unwrap_or("unknown") {
383383
"inProgress" => continue,
384384
"completed" => {
@@ -528,7 +528,7 @@ ureq = { version = "3", default-features = false, features = [
528528
Then we need to implement `HttpClient` for another HTTP client like [`ureq`](https://docs.rs/ureq):
529529

530530
```rust no_run
531-
use azure_core::{error::{ErrorKind, ResultExt as _}, http::{HttpClient, BufResponse, Request}};
531+
use azure_core::{error::{ErrorKind, ResultExt as _}, http::{HttpClient, AsyncRawResponse, Request}};
532532
use ureq::tls::{TlsConfig, TlsProvider};
533533

534534
#[derive(Debug)]
@@ -552,7 +552,7 @@ impl Default for Agent {
552552

553553
#[async_trait::async_trait]
554554
impl HttpClient for Agent {
555-
async fn execute_request(&self, request: &Request) -> azure_core::Result<BufResponse> {
555+
async fn execute_request(&self, request: &Request) -> azure_core::Result<AsyncRawResponse> {
556556
let request: ::http::request::Request<Vec<u8>> = todo!("convert our request into their request");
557557
let response = self
558558
.0
@@ -625,7 +625,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
625625
// get a secret
626626
let secret = client.get_secret("secret-name", None)
627627
.await?
628-
.into_body()?;
628+
.into_model()?;
629629

630630
println!("{secret:#?}");
631631

sdk/core/azure_core/benches/benchmarks.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Licensed under the MIT License.
33

44
use azure_core::http::{
5-
headers::Headers, BufResponse, HttpClient, Method, Request, StatusCode, Url,
5+
headers::Headers, AsyncRawResponse, HttpClient, Method, Request, StatusCode, Url,
66
};
77
use azure_core_test::http::MockHttpClient;
88
use criterion::{black_box, criterion_group, criterion_main, Criterion};
@@ -72,7 +72,7 @@ fn http_transport_test(c: &mut Criterion) {
7272
// client to be used in the benchmark
7373
let mock_client = Arc::new(MockHttpClient::new(move |_| {
7474
async move {
75-
Ok(BufResponse::from_bytes(
75+
Ok(AsyncRawResponse::from_bytes(
7676
StatusCode::Ok,
7777
Headers::new(),
7878
vec![],

sdk/core/azure_core/examples/core_error_response.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
use azure_core::{
55
credentials::TokenCredential,
66
error::ErrorResponse,
7-
http::{headers::Headers, BufResponse, HttpClient, StatusCode, Transport},
7+
http::{headers::Headers, AsyncRawResponse, HttpClient, StatusCode, Transport},
88
json,
99
};
1010
use azure_core_test::{credentials::MockCredential, http::MockHttpClient, ErrorKind};
@@ -92,7 +92,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
9292
fn setup() -> Result<(Arc<dyn TokenCredential>, Arc<dyn HttpClient>), Box<dyn std::error::Error>> {
9393
let client = MockHttpClient::new(|_| {
9494
async move {
95-
Ok(BufResponse::from_bytes(
95+
Ok(AsyncRawResponse::from_bytes(
9696
StatusCode::BadRequest,
9797
Headers::new(),
9898
r#"{

sdk/core/azure_core/examples/core_pager.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
use azure_core::{
55
credentials::TokenCredential,
6-
http::{headers::Headers, BufResponse, HttpClient, Method, StatusCode, Transport},
6+
http::{headers::Headers, AsyncRawResponse, HttpClient, Method, StatusCode, Transport},
77
};
88
use azure_core_test::{credentials::MockCredential, http::MockHttpClient};
99
use azure_security_keyvault_secrets::{ResourceExt, SecretClient, SecretClientOptions};
@@ -64,7 +64,7 @@ async fn test_page_iterator() -> Result<(), Box<dyn std::error::Error>> {
6464
let mut pager = client.list_secret_properties(None)?.into_pages();
6565
let mut names = Vec::new();
6666
while let Some(page) = pager.try_next().await? {
67-
let page = page.into_body()?;
67+
let page = page.into_model()?;
6868
for secret in page.value {
6969
names.push(secret.resource_id()?.name);
7070
}
@@ -106,7 +106,7 @@ fn setup() -> Result<(Arc<dyn TokenCredential>, Arc<dyn HttpClient>), Box<dyn st
106106
assert_eq!(request.method(), Method::Get);
107107
assert_eq!(request.url().path(), "/secrets");
108108
match idx {
109-
0 => Ok(BufResponse::from_bytes(
109+
0 => Ok(AsyncRawResponse::from_bytes(
110110
StatusCode::Ok,
111111
Headers::new(),
112112
// First page with continuation (nextLink)
@@ -116,7 +116,7 @@ fn setup() -> Result<(Arc<dyn TokenCredential>, Arc<dyn HttpClient>), Box<dyn st
116116
],
117117
"nextLink":"https://my-vault.vault.azure.net/secrets?api-version=7.4&$skiptoken=page2"}"#,
118118
)),
119-
1 => Ok(BufResponse::from_bytes(
119+
1 => Ok(AsyncRawResponse::from_bytes(
120120
StatusCode::Ok,
121121
Headers::new(),
122122
// Second (final) page without nextLink

sdk/core/azure_core/examples/core_poller.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use azure_core::{
55
credentials::TokenCredential,
66
http::{
77
headers::{Headers, RETRY_AFTER},
8-
BufResponse, HttpClient, Method, StatusCode, Transport,
8+
AsyncRawResponse, HttpClient, Method, StatusCode, Transport,
99
},
1010
};
1111
use azure_core_test::{credentials::MockCredential, http::MockHttpClient};
@@ -41,7 +41,7 @@ async fn test_poller() -> Result<(), Box<dyn std::error::Error>> {
4141
let certificate = client
4242
.create_certificate("my-cert", params.try_into()?, None)?
4343
.await?
44-
.into_body()?;
44+
.into_model()?;
4545
assert_eq!(
4646
certificate.id,
4747
Some("https://my-vault.vault.azure.net/certificates/my-cert/version".into())
@@ -79,7 +79,7 @@ async fn test_poller_stream() -> Result<(), Box<dyn std::error::Error>> {
7979
// Manually poll status updates until completion
8080
let mut final_status = None;
8181
while let Some(status) = poller.try_next().await? {
82-
let status = status.into_body()?;
82+
let status = status.into_model()?;
8383
assert!(status.error.is_none());
8484
final_status = Some(status);
8585
}
@@ -132,7 +132,7 @@ fn setup() -> Result<(Arc<dyn TokenCredential>, Arc<dyn HttpClient>), Box<dyn st
132132
assert_eq!(request.url().path(), "/certificates/my-cert/create");
133133
let mut headers = Headers::new();
134134
headers.insert(RETRY_AFTER, "0");
135-
Ok(BufResponse::from_bytes(
135+
Ok(AsyncRawResponse::from_bytes(
136136
StatusCode::Ok,
137137
headers,
138138
r#"{"id":"https://my-vault.vault.azure.net/certificates/my-cert/pending","status":"inProgress"}"#,
@@ -142,7 +142,7 @@ fn setup() -> Result<(Arc<dyn TokenCredential>, Arc<dyn HttpClient>), Box<dyn st
142142
// Polling GET for status
143143
assert_eq!(request.method(), Method::Get);
144144
assert_eq!(request.url().path(), "/certificates/my-cert/pending");
145-
Ok(BufResponse::from_bytes(
145+
Ok(AsyncRawResponse::from_bytes(
146146
StatusCode::Ok,
147147
Headers::new(),
148148
r#"{"id":"https://my-vault.vault.azure.net/certificates/my-cert/pending","status":"completed","target":"https://my-vault.vault.azure.net/certificates/my-cert"}"#,
@@ -152,7 +152,7 @@ fn setup() -> Result<(Arc<dyn TokenCredential>, Arc<dyn HttpClient>), Box<dyn st
152152
// Final GET for the target
153153
assert_eq!(request.method(), Method::Get);
154154
assert_eq!(request.url().path(), "/certificates/my-cert");
155-
Ok(BufResponse::from_bytes(
155+
Ok(AsyncRawResponse::from_bytes(
156156
StatusCode::Ok,
157157
Headers::new(),
158158
r#"{"id":"https://my-vault.vault.azure.net/certificates/my-cert/version","cer":"dGVzdA=="}"#,

sdk/core/azure_core/examples/core_remove_user_agent.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use azure_core::{
77
http::{
88
headers::Headers,
99
policies::{Policy, PolicyResult},
10-
BufResponse, Context, HttpClient, Method, Request, StatusCode, Transport,
10+
AsyncRawResponse, Context, HttpClient, Method, Request, StatusCode, Transport,
1111
},
1212
};
1313
use azure_core_test::{credentials::MockCredential, http::MockHttpClient};
@@ -62,7 +62,7 @@ async fn test_remove_user_agent() -> Result<(), Box<dyn std::error::Error>> {
6262
)?;
6363

6464
// We'll fetch a secret and let the mock client assert the User-Agent header was removed.
65-
let secret = client.get_secret("my-secret", None).await?.into_body()?;
65+
let secret = client.get_secret("my-secret", None).await?.into_model()?;
6666
assert_eq!(secret.value.as_deref(), Some("secret-value"));
6767

6868
Ok(())
@@ -92,7 +92,7 @@ fn setup() -> Result<(Arc<dyn TokenCredential>, Arc<dyn HttpClient>), Box<dyn st
9292
.any(|(name, _)| name.as_str().eq_ignore_ascii_case("user-agent")),
9393
"user-agent header should be absent"
9494
);
95-
Ok(BufResponse::from_bytes(
95+
Ok(AsyncRawResponse::from_bytes(
9696
StatusCode::Ok,
9797
Headers::new(),
9898
r#"{"value":"secret-value"}"#,

sdk/core/azure_core/examples/core_ureq_client.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
use async_trait::async_trait;
55
use azure_core::{
66
error::ErrorKind,
7-
http::{headers::Headers, BufResponse, ClientOptions, HttpClient, Request, Transport},
7+
http::{headers::Headers, AsyncRawResponse, ClientOptions, HttpClient, Request, Transport},
88
};
99
use azure_identity::DeveloperToolsCredential;
1010
use azure_security_keyvault_secrets::{ResourceExt as _, SecretClient, SecretClientOptions};
@@ -35,7 +35,7 @@ impl Default for Agent {
3535
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
3636
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
3737
impl HttpClient for Agent {
38-
async fn execute_request(&self, request: &Request) -> azure_core::Result<BufResponse> {
38+
async fn execute_request(&self, request: &Request) -> azure_core::Result<AsyncRawResponse> {
3939
let request = into_request(request)?;
4040
let response = self
4141
.0
@@ -102,7 +102,7 @@ fn into_request(request: &Request) -> azure_core::Result<::http::Request<Vec<u8>
102102
Ok(req)
103103
}
104104

105-
fn into_response(response: ::http::Response<ureq::Body>) -> azure_core::Result<BufResponse> {
105+
fn into_response(response: ::http::Response<ureq::Body>) -> azure_core::Result<AsyncRawResponse> {
106106
use ::http::response::Parts;
107107
use azure_core::http::StatusCode;
108108

@@ -128,5 +128,5 @@ fn into_response(response: ::http::Response<ureq::Body>) -> azure_core::Result<B
128128
.read_to_vec()
129129
.with_context_fn(ErrorKind::Io, || "failed to read response body")?;
130130

131-
Ok(BufResponse::from_bytes(status, response_headers, body))
131+
Ok(AsyncRawResponse::from_bytes(status, response_headers, body))
132132
}

0 commit comments

Comments
 (0)