Skip to content

Commit ec133a4

Browse files
committed
models/krate: Remove errors::bad_request() dependency
1 parent a5694a8 commit ec133a4

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

src/controllers/krate/owners.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
//! All routes related to managing owners of a crate
22
33
use crate::controllers::krate::CratePath;
4+
use crate::models::krate::OwnerRemoveError;
45
use crate::models::{krate::NewOwnerInvite, token::EndpointScope};
56
use crate::models::{Crate, Owner, Rights, Team, User};
6-
use crate::util::errors::{bad_request, crate_not_found, custom, AppResult};
7+
use crate::util::errors::{bad_request, crate_not_found, custom, AppResult, BoxedAppError};
78
use crate::views::EncodableOwner;
89
use crate::{app::AppState, models::krate::OwnerAddError};
910
use crate::{auth::AuthCheck, email::Email};
@@ -274,6 +275,17 @@ async fn modify_owners(
274275
Ok(json!({ "msg": comma_sep_msg, "ok": true }))
275276
}
276277

278+
impl From<OwnerRemoveError> for BoxedAppError {
279+
fn from(error: OwnerRemoveError) -> Self {
280+
match error {
281+
OwnerRemoveError::Diesel(error) => error.into(),
282+
OwnerRemoveError::NotFound { login } => {
283+
bad_request(format!("could not find owner with login `{login}`"))
284+
}
285+
}
286+
}
287+
}
288+
277289
pub struct OwnerInviteEmail {
278290
/// The destination email address for this email.
279291
recipient_email_address: String,

src/models/krate.rs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::models::{
1616
ReverseDependency, User, Version,
1717
};
1818
use crate::schema::*;
19-
use crate::util::errors::{bad_request, version_not_found, AppResult};
19+
use crate::util::errors::{version_not_found, AppResult};
2020
use crate::{app::App, util::errors::BoxedAppError};
2121
use crates_io_diesel_helpers::canon_crate_name;
2222

@@ -441,7 +441,11 @@ impl Crate {
441441
}
442442
}
443443

444-
pub async fn owner_remove(&self, conn: &mut AsyncPgConnection, login: &str) -> AppResult<()> {
444+
pub async fn owner_remove(
445+
&self,
446+
conn: &mut AsyncPgConnection,
447+
login: &str,
448+
) -> Result<(), OwnerRemoveError> {
445449
let query = diesel::sql_query(
446450
r#"WITH crate_owners_with_login AS (
447451
SELECT
@@ -477,8 +481,7 @@ impl Crate {
477481
.await?;
478482

479483
if num_updated_rows == 0 {
480-
let error = format!("could not find owner with login `{login}`");
481-
return Err(bad_request(error));
484+
return Err(OwnerRemoveError::not_found(login));
482485
}
483486

484487
Ok(())
@@ -533,6 +536,21 @@ pub enum OwnerAddError {
533536
AlreadyInvited(Box<User>),
534537
}
535538

539+
#[derive(Debug, Error)]
540+
pub enum OwnerRemoveError {
541+
#[error(transparent)]
542+
Diesel(#[from] diesel::result::Error),
543+
#[error("Could not find owner with login `{login}`")]
544+
NotFound { login: String },
545+
}
546+
547+
impl OwnerRemoveError {
548+
pub fn not_found(login: &str) -> Self {
549+
let login = login.to_string();
550+
Self::NotFound { login }
551+
}
552+
}
553+
536554
/// A [`BoxedAppError`] does not impl [`std::error::Error`] so it needs a manual
537555
/// [`From`] impl.
538556
impl From<BoxedAppError> for OwnerAddError {

0 commit comments

Comments
 (0)