Skip to content

Commit d8d5624

Browse files
committed
models/krate: Move ensure_name_not_reserved() fn to publish module
This function does not need to be on the `NewCrate` struct, since the only relevant field is `name` and we can pass that in as a `&str` instead.
1 parent eda1b01 commit d8d5624

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

src/controllers/krate/publish.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::auth::AuthCheck;
44
use crate::background_jobs::{Job, PRIORITY_RENDER_README};
55
use axum::body::Bytes;
66
use crates_io_tarball::{process_tarball, TarballError};
7+
use diesel::dsl::{exists, select};
78
use hex::ToHex;
89
use hyper::body::Buf;
910
use sha2::{Digest, Sha256};
@@ -19,6 +20,7 @@ use crate::middleware::log_request::RequestLogExt;
1920
use crate::models::token::EndpointScope;
2021
use crate::rate_limiter::LimitedAction;
2122
use crate::schema::*;
23+
use crate::sql::canon_crate_name;
2224
use crate::util::errors::{cargo_err, internal, AppResult};
2325
use crate::util::Maximums;
2426
use crate::views::{
@@ -144,7 +146,7 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult<Json<GoodCra
144146
let license_file = metadata.license_file.as_deref();
145147

146148
persist.validate()?;
147-
persist.ensure_name_not_reserved(conn)?;
149+
ensure_name_not_reserved(persist.name, conn)?;
148150

149151
let krate = persist.create_or_update(conn, user.id)?;
150152

@@ -336,6 +338,19 @@ fn split_body(mut bytes: Bytes) -> AppResult<(Bytes, Bytes)> {
336338
Ok((json_bytes, tarball_bytes))
337339
}
338340

341+
fn ensure_name_not_reserved(name: &str, conn: &mut PgConnection) -> AppResult<()> {
342+
let reserved_name: bool = select(exists(
343+
reserved_crate_names::table
344+
.filter(canon_crate_name(reserved_crate_names::name).eq(canon_crate_name(name))),
345+
))
346+
.get_result(conn)?;
347+
if reserved_name {
348+
Err(cargo_err("cannot upload a crate with a reserved name"))
349+
} else {
350+
Ok(())
351+
}
352+
}
353+
339354
fn missing_metadata_error_message(missing: &[&str]) -> String {
340355
format!(
341356
"missing or empty metadata fields: {}. Please \

src/models/krate.rs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -148,22 +148,6 @@ impl<'a> NewCrate<'a> {
148148
Ok(())
149149
}
150150

151-
pub fn ensure_name_not_reserved(&self, conn: &mut PgConnection) -> AppResult<()> {
152-
use crate::schema::reserved_crate_names::dsl::*;
153-
use diesel::dsl::exists;
154-
use diesel::select;
155-
156-
let reserved_name: bool = select(exists(
157-
reserved_crate_names.filter(canon_crate_name(name).eq(canon_crate_name(self.name))),
158-
))
159-
.get_result(conn)?;
160-
if reserved_name {
161-
Err(cargo_err("cannot upload a crate with a reserved name"))
162-
} else {
163-
Ok(())
164-
}
165-
}
166-
167151
fn save_new_crate(&self, conn: &mut PgConnection, user_id: i32) -> QueryResult<Option<Crate>> {
168152
use crate::schema::crates::dsl::*;
169153

0 commit comments

Comments
 (0)