From ef9ffb204e29bd34b20dd4c88daa1c1c6d6c9195 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 28 Oct 2024 13:12:55 +0100 Subject: [PATCH 1/2] controllers/krate/publish: Simplify `match` statement via `map_err()` --- src/controllers/krate/publish.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/controllers/krate/publish.rs b/src/controllers/krate/publish.rs index 1451e3795a..a49c2d72a8 100644 --- a/src/controllers/krate/publish.rs +++ b/src/controllers/krate/publish.rs @@ -373,16 +373,16 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult { - return Err(bad_request(format_args!( + let version = new_version.save(conn, &verified_email_address).map_err(|error| { + use diesel::result::{Error, DatabaseErrorKind}; + match error { + Error::DatabaseError(DatabaseErrorKind::UniqueViolation, _) => bad_request(format_args!( "crate version `{}` is already uploaded", new_version.num_no_build - ))); - }, - Err(error) => return Err(error.into()), - Ok(version) => version, - }; + )), + error => error.into(), + } + })?; insert_version_owner_action( conn, From 7f0b0987007bcdbc4519a0bf7ff9be8989249f66 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 28 Oct 2024 13:15:02 +0100 Subject: [PATCH 2/2] controllers/krate/publish: Extract `duplicate_version_error()` fn --- src/controllers/krate/publish.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/controllers/krate/publish.rs b/src/controllers/krate/publish.rs index a49c2d72a8..71226e231c 100644 --- a/src/controllers/krate/publish.rs +++ b/src/controllers/krate/publish.rs @@ -376,10 +376,8 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult bad_request(format_args!( - "crate version `{}` is already uploaded", - new_version.num_no_build - )), + Error::DatabaseError(DatabaseErrorKind::UniqueViolation, _) => + duplicate_version_error(new_version.num_no_build), error => error.into(), } })?; @@ -620,6 +618,10 @@ fn missing_metadata_error_message(missing: &[&str]) -> String { ) } +fn duplicate_version_error(version: &str) -> BoxedAppError { + bad_request(format!("crate version `{version}` is already uploaded")) +} + fn validate_rust_version(value: &str) -> AppResult<()> { match semver::VersionReq::parse(value) { // Exclude semver operators like `^` and pre-release identifiers