Skip to content

Commit 83ec7e4

Browse files
committed
refactor: Upgrade to wstd 0.6.1
1 parent 808efa1 commit 83ec7e4

6 files changed

Lines changed: 168 additions & 234 deletions

File tree

activity/fly-http/impl/src/app.rs

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@ use crate::generated::exports::obelisk_flyio::activity_fly_http::apps;
22
use crate::{API_BASE_URL, AppName, OrgSlug, request_with_api_token};
33
use anyhow::anyhow;
44
use serde::{Deserialize, Serialize};
5-
use wstd::http::request::JsonRequest as _;
6-
use wstd::http::{Client, Method, StatusCode};
5+
use wstd::http::{Body, Client, Method, StatusCode};
76
use wstd::runtime::block_on;
87

98
async fn get(app_name: AppName) -> Result<Option<apps::App>, anyhow::Error> {
109
let request = request_with_api_token()?
1110
.method(Method::GET)
1211
.uri(format!("{API_BASE_URL}/apps/{app_name}"))
13-
.body(wstd::io::empty())?;
12+
.body(Body::empty())?;
1413
let mut response = Client::new().send(request).await?;
1514

1615
if response.status().is_success() {
@@ -20,11 +19,9 @@ async fn get(app_name: AppName) -> Result<Option<apps::App>, anyhow::Error> {
2019
Ok(None)
2120
} else {
2221
let error_status = response.status();
23-
let error_body = response.body_mut().bytes().await?;
24-
Err(anyhow!(
25-
"failed with status {error_status}: {}",
26-
String::from_utf8_lossy(&error_body)
27-
))
22+
let mut response = response.into_body();
23+
let error_body = response.str_contents().await?;
24+
Err(anyhow!("failed with status {error_status}: {error_body}",))
2825
}
2926
}
3027

@@ -46,7 +43,7 @@ async fn put(org_slug: OrgSlug, app_name: AppName) -> Result<apps::App, anyhow::
4643
let post_request = request_with_api_token()?
4744
.method(Method::POST)
4845
.uri(format!("{API_BASE_URL}/apps"))
49-
.json(&request_body)?;
46+
.body(Body::from_json(&request_body)?)?;
5047

5148
let mut response = client.send(post_request).await?;
5249

@@ -64,14 +61,14 @@ async fn put(org_slug: OrgSlug, app_name: AppName) -> Result<apps::App, anyhow::
6461

6562
// Investigate if the app already exists
6663
let original_post_status = response.status();
67-
let original_post_error = response.into_body().bytes().await;
64+
let mut response = response.into_body();
6865

6966
if original_post_status == StatusCode::UNPROCESSABLE_ENTITY {
7067
// Prepare a GET request to check for the existing app.
7168
let get_request = request_with_api_token()?
7269
.method(Method::GET)
7370
.uri(format!("{API_BASE_URL}/apps/{app_name}"))
74-
.body(wstd::io::empty())?;
71+
.body(Body::empty())?;
7572

7673
let mut get_response = client.send(get_request).await?;
7774

@@ -108,19 +105,17 @@ async fn put(org_slug: OrgSlug, app_name: AppName) -> Result<apps::App, anyhow::
108105
}
109106
// The GET request failed, so the app doesn't exist.
110107
// The original error from the POST request is the true cause of failure.
108+
let original_post_error = response.str_contents().await?;
111109
Err(anyhow!(
112-
"failed with status {original_post_status}: {}",
113-
original_post_error
114-
.map(|vec| String::from_utf8_lossy(&vec).to_string())
115-
.unwrap_or_else(|e| e.to_string())
110+
"failed with status {original_post_status}: {original_post_error}",
116111
))
117112
}
118113

119114
async fn list(org_slug: OrgSlug) -> Result<Vec<apps::App>, anyhow::Error> {
120115
let request = request_with_api_token()?
121116
.method(Method::GET)
122117
.uri(format!("{API_BASE_URL}/apps?org_slug={org_slug}"))
123-
.body(wstd::io::empty())?;
118+
.body(Body::empty())?;
124119
let mut response = Client::new().send(request).await?;
125120

126121
if response.status().is_success() {
@@ -132,11 +127,9 @@ async fn list(org_slug: OrgSlug) -> Result<Vec<apps::App>, anyhow::Error> {
132127
Ok(apps_response.apps)
133128
} else {
134129
let error_status = response.status();
135-
let error_body = response.body_mut().bytes().await?;
136-
Err(anyhow!(
137-
"failed with status {error_status}: {}",
138-
String::from_utf8_lossy(&error_body)
139-
))
130+
let mut response = response.into_body();
131+
let error_body = response.str_contents().await?;
132+
Err(anyhow!("failed with status {error_status}: {error_body}",))
140133
}
141134
}
142135

@@ -148,7 +141,7 @@ async fn delete(app_name: AppName, force: bool) -> Result<(), anyhow::Error> {
148141
let request = request_with_api_token()?
149142
.method(Method::DELETE)
150143
.uri(url)
151-
.body(wstd::io::empty())?;
144+
.body(Body::empty())?;
152145

153146
let response = Client::new().send(request).await?;
154147
let status = response.status();
@@ -157,11 +150,9 @@ async fn delete(app_name: AppName, force: bool) -> Result<(), anyhow::Error> {
157150
Ok(())
158151
} else {
159152
let error_status = response.status();
160-
let error_body = response.into_body().bytes().await?;
161-
Err(anyhow!(
162-
"failed with status {error_status}: {}",
163-
String::from_utf8_lossy(&error_body)
164-
))
153+
let mut response = response.into_body();
154+
let error_body = response.str_contents().await?;
155+
Err(anyhow!("failed with status {error_status}: {error_body}",))
165156
}
166157
}
167158

activity/fly-http/impl/src/ips.rs

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ use crate::generated::obelisk_flyio::activity_fly_http::regions::Region;
55
use crate::{API_BASE_URL, AppName, request_with_api_token};
66
use anyhow::anyhow;
77
use serde::{Deserialize, Deserializer, Serialize};
8-
use wstd::http::request::JsonRequest;
9-
use wstd::http::{Client, Method, StatusCode};
8+
use wstd::http::{Body, Client, Method, StatusCode};
109
use wstd::runtime::block_on;
1110

1211
async fn allocate_ip(app_name: AppName, request: ips::IpRequest) -> Result<String, anyhow::Error> {
@@ -44,32 +43,33 @@ async fn allocate_ip(app_name: AppName, request: ips::IpRequest) -> Result<Strin
4443
let request = request_with_api_token()?
4544
.method(Method::POST)
4645
.uri(format!("{API_BASE_URL}/apps/{app_name}/ip_assignments"))
47-
.json(&body)?;
46+
.header("content-type", "application/json")
47+
.body(Body::from_json(&body)?)?;
4848

49-
let mut response = Client::new().send(request).await?;
49+
let response = Client::new().send(request).await?;
50+
let resp_status = response.status();
51+
let mut response = response.into_body();
52+
let response = response.str_contents().await?;
5053

51-
if response.status().is_success() {
54+
if resp_status.is_success() {
5255
#[derive(Deserialize)]
5356
struct AssignIpResponse {
5457
ip: String,
5558
}
56-
let assign_response: AssignIpResponse = response.body_mut().json().await?;
57-
Ok(assign_response.ip)
59+
60+
let response: AssignIpResponse = serde_json::from_str(response)
61+
.inspect_err(|_| eprintln!("cannot deserialize: {response}"))?;
62+
Ok(response.ip)
5863
} else {
59-
let error_status = response.status();
60-
let error_body = response.body_mut().bytes().await?;
61-
Err(anyhow!(
62-
"failed with status {error_status}: {}",
63-
String::from_utf8_lossy(&error_body)
64-
))
64+
Err(anyhow!("failed with status {resp_status}: {response}",))
6565
}
6666
}
6767

6868
async fn list_ips(app_name: AppName) -> Result<Vec<ips::IpDetail>, anyhow::Error> {
6969
let request = request_with_api_token()?
7070
.method(Method::GET)
7171
.uri(format!("{API_BASE_URL}/apps/{app_name}/ip_assignments"))
72-
.body(wstd::io::empty())?;
72+
.body(Body::empty())?;
7373

7474
let mut response = Client::new().send(request).await?;
7575

@@ -117,11 +117,9 @@ async fn list_ips(app_name: AppName) -> Result<Vec<ips::IpDetail>, anyhow::Error
117117
Ok(ip_details)
118118
} else {
119119
let error_status = response.status();
120-
let error_body = response.body_mut().bytes().await?;
121-
Err(anyhow!(
122-
"failed with status {error_status}: {}",
123-
String::from_utf8_lossy(&error_body)
124-
))
120+
let mut response = response.into_body();
121+
let error_body = response.str_contents().await?;
122+
Err(anyhow!("failed with status {error_status}: {error_body}",))
125123
}
126124
}
127125

@@ -131,7 +129,7 @@ async fn release_ip(app_name: AppName, ip: String) -> Result<(), anyhow::Error>
131129
.uri(format!(
132130
"{API_BASE_URL}/apps/{app_name}/ip_assignments/{ip}"
133131
))
134-
.body(wstd::io::empty())?;
132+
.body(Body::empty())?;
135133

136134
let response = Client::new().send(request).await?;
137135

@@ -143,11 +141,9 @@ async fn release_ip(app_name: AppName, ip: String) -> Result<(), anyhow::Error>
143141
// Idempotency: if IP does not exist, return Ok, as this might be a retry.
144142
return Ok(());
145143
}
146-
let error_body = response.into_body().bytes().await?;
147-
Err(anyhow!(
148-
"failed with status {error_status}: {}",
149-
String::from_utf8_lossy(&error_body)
150-
))
144+
let mut response = response.into_body();
145+
let error_body = response.str_contents().await?;
146+
Err(anyhow!("failed with status {error_status}: {error_body}",))
151147
}
152148
}
153149

0 commit comments

Comments
 (0)