Skip to content

Commit 747470c

Browse files
authored
ConduitRequest: Remove Cursor wrapper (#5906)
Most request handlers don't need this extra wrapper
1 parent c4ee89c commit 747470c

File tree

6 files changed

+22
-28
lines changed

6 files changed

+22
-28
lines changed

conduit-axum/src/conduit.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use axum::{async_trait, RequestExt};
55
use http_body::LengthLimitError;
66
use hyper::Body;
77
use std::error::Error;
8-
use std::io::Cursor;
98
use std::ops::{Deref, DerefMut};
109

1110
use crate::response::AxumResponse;
@@ -31,10 +30,10 @@ pub fn box_error<E: Error + Send + 'static>(error: E) -> BoxError {
3130
}
3231

3332
#[derive(Debug)]
34-
pub struct ConduitRequest(pub Request<Cursor<Bytes>>);
33+
pub struct ConduitRequest(pub Request<Bytes>);
3534

3635
impl Deref for ConduitRequest {
37-
type Target = Request<Cursor<Bytes>>;
36+
type Target = Request<Bytes>;
3837

3938
fn deref(&self) -> &Self::Target {
4039
&self.0
@@ -80,6 +79,6 @@ where
8079
}
8180
};
8281

83-
Ok(ConduitRequest(request.map(Cursor::new)))
82+
Ok(ConduitRequest(request))
8483
}
8584
}

src/controllers/crate_owner_invitation.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,10 +258,10 @@ struct OwnerInvitation {
258258
}
259259

260260
/// Handles the `PUT /api/v1/me/crate_owner_invitations/:crate_id` route.
261-
pub async fn handle_invite(mut req: ConduitRequest) -> AppResult<Json<Value>> {
261+
pub async fn handle_invite(req: ConduitRequest) -> AppResult<Json<Value>> {
262262
conduit_compat(move || {
263-
let crate_invite: OwnerInvitation = serde_json::from_reader(req.body_mut())
264-
.map_err(|_| bad_request("invalid json request"))?;
263+
let crate_invite: OwnerInvitation =
264+
serde_json::from_slice(req.body()).map_err(|_| bad_request("invalid json request"))?;
265265

266266
let crate_invite = crate_invite.crate_owner_invite;
267267

src/controllers/krate/owners.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use crate::controllers::prelude::*;
55
use crate::models::token::EndpointScope;
66
use crate::models::{Crate, Owner, Rights, Team, User};
77
use crate::views::EncodableOwner;
8+
use axum::body::Bytes;
89
use http::Request;
9-
use std::io::Read;
1010

1111
/// Handles the `GET /crates/:crate_id/owners` route.
1212
pub async fn owners(Path(crate_name): Path<String>, req: ConduitRequest) -> AppResult<Json<Value>> {
@@ -63,17 +63,17 @@ pub async fn owner_user(
6363
/// Handles the `PUT /crates/:crate_id/owners` route.
6464
pub async fn add_owners(
6565
Path(crate_name): Path<String>,
66-
mut req: ConduitRequest,
66+
req: ConduitRequest,
6767
) -> AppResult<Json<Value>> {
68-
conduit_compat(move || modify_owners(&crate_name, &mut req, true)).await
68+
conduit_compat(move || modify_owners(&crate_name, &req, true)).await
6969
}
7070

7171
/// Handles the `DELETE /crates/:crate_id/owners` route.
7272
pub async fn remove_owners(
7373
Path(crate_name): Path<String>,
74-
mut req: ConduitRequest,
74+
req: ConduitRequest,
7575
) -> AppResult<Json<Value>> {
76-
conduit_compat(move || modify_owners(&crate_name, &mut req, false)).await
76+
conduit_compat(move || modify_owners(&crate_name, &req, false)).await
7777
}
7878

7979
/// Parse the JSON request body of requests to modify the owners of a crate.
@@ -83,26 +83,22 @@ pub async fn remove_owners(
8383
/// ```json
8484
/// {"owners": ["username", "github:org:team", ...]}
8585
/// ```
86-
fn parse_owners_request<B: Read>(req: &mut Request<B>) -> AppResult<Vec<String>> {
86+
fn parse_owners_request(req: &Request<Bytes>) -> AppResult<Vec<String>> {
8787
#[derive(Deserialize)]
8888
struct Request {
8989
// identical, for back-compat (owners preferred)
9090
users: Option<Vec<String>>,
9191
owners: Option<Vec<String>>,
9292
}
9393
let request: Request =
94-
serde_json::from_reader(req.body_mut()).map_err(|_| cargo_err("invalid json request"))?;
94+
serde_json::from_slice(req.body()).map_err(|_| cargo_err("invalid json request"))?;
9595
request
9696
.owners
9797
.or(request.users)
9898
.ok_or_else(|| cargo_err("invalid json request"))
9999
}
100100

101-
fn modify_owners<B: Read>(
102-
crate_name: &str,
103-
req: &mut Request<B>,
104-
add: bool,
105-
) -> AppResult<Json<Value>> {
101+
fn modify_owners(crate_name: &str, req: &Request<Bytes>, add: bool) -> AppResult<Json<Value>> {
106102
let logins = parse_owners_request(req)?;
107103
let app = req.app();
108104

src/controllers/krate/publish.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ pub const WILDCARD_ERROR_MESSAGE: &str = "wildcard (`*`) dependency constraints
4646
/// threads and return completion or error through other methods a `cargo publish
4747
/// --status` command, via crates.io's front end, or email.
4848
pub async fn publish(req: ConduitRequest) -> AppResult<Json<GoodCrate>> {
49-
let (req, body) = req.0.into_parts();
50-
let bytes = body.into_inner();
49+
let (req, bytes) = req.0.into_parts();
5150
let (json_bytes, tarball_bytes) = split_body(bytes, &req)?;
5251

5352
let new_crate: EncodableCrateUpload = serde_json::from_slice(&json_bytes)

src/controllers/token.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ pub async fn list(req: ConduitRequest) -> AppResult<Json<Value>> {
2626
}
2727

2828
/// Handles the `PUT /me/tokens` route.
29-
pub async fn new(mut req: ConduitRequest) -> AppResult<Json<Value>> {
29+
pub async fn new(req: ConduitRequest) -> AppResult<Json<Value>> {
3030
conduit_compat(move || {
3131
/// The incoming serialization format for the `ApiToken` model.
3232
#[derive(Deserialize, Serialize)]
@@ -40,7 +40,7 @@ pub async fn new(mut req: ConduitRequest) -> AppResult<Json<Value>> {
4040
api_token: NewApiToken,
4141
}
4242

43-
let new: NewApiTokenRequest = json::from_reader(req.body_mut())
43+
let new: NewApiTokenRequest = json::from_slice(req.body())
4444
.map_err(|e| bad_request(&format!("invalid new token request: {e:?}")))?;
4545

4646
let name = &new.api_token.name;

src/controllers/user/me.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ pub async fn updates(req: ConduitRequest) -> AppResult<Json<Value>> {
101101
/// Handles the `PUT /users/:user_id` route.
102102
pub async fn update_user(
103103
Path(param_user_id): Path<i32>,
104-
mut req: ConduitRequest,
104+
req: ConduitRequest,
105105
) -> AppResult<Response> {
106106
conduit_compat(move || {
107107
use self::emails::user_id;
@@ -128,8 +128,8 @@ pub async fn update_user(
128128
email: Option<String>,
129129
}
130130

131-
let user_update: UserUpdate = serde_json::from_reader(req.body_mut())
132-
.map_err(|_| bad_request("invalid json request"))?;
131+
let user_update: UserUpdate =
132+
serde_json::from_slice(req.body()).map_err(|_| bad_request("invalid json request"))?;
133133

134134
let user_email = match &user_update.user.email {
135135
Some(email) => email.trim(),
@@ -231,7 +231,7 @@ pub async fn regenerate_token_and_send(
231231
}
232232

233233
/// Handles `PUT /me/email_notifications` route
234-
pub async fn update_email_notifications(mut req: ConduitRequest) -> AppResult<Response> {
234+
pub async fn update_email_notifications(req: ConduitRequest) -> AppResult<Response> {
235235
conduit_compat(move || {
236236
use self::crate_owners::dsl::*;
237237
use diesel::pg::upsert::excluded;
@@ -243,7 +243,7 @@ pub async fn update_email_notifications(mut req: ConduitRequest) -> AppResult<Re
243243
}
244244

245245
let updates: HashMap<i32, bool> =
246-
serde_json::from_reader::<_, Vec<CrateEmailNotifications>>(req.body_mut())
246+
serde_json::from_slice::<Vec<CrateEmailNotifications>>(req.body())
247247
.map_err(|_| bad_request("invalid json request"))?
248248
.iter()
249249
.map(|c| (c.id, c.email_notifications))

0 commit comments

Comments
 (0)