Skip to content

Commit ba4e59d

Browse files
committed
publish: Move dependency name validation to validate_dependencies() fn
1 parent fa9ff5a commit ba4e59d

File tree

4 files changed

+15
-23
lines changed

4 files changed

+15
-23
lines changed

src/controllers/krate/publish.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,17 @@ pub fn validate_dependencies(deps: &[EncodableCrateDependency]) -> AppResult<()>
472472
}
473473
_ => {}
474474
}
475+
476+
if let Some(toml_name) = &dep.explicit_name_in_toml {
477+
if !Crate::valid_dependency_name(toml_name) {
478+
return Err(cargo_err(&format_args!(
479+
"\"{toml_name}\" is an invalid dependency name (dependency \
480+
names must start with a letter or underscore, contain only \
481+
letters, numbers, hyphens, or underscores and have at most \
482+
{MAX_NAME_LENGTH} characters)"
483+
)));
484+
}
485+
}
475486
}
476487

477488
Ok(())

src/tests/builders/dependency.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crates_io::views::krate_publish as u;
22

33
/// A builder for constructing a dependency of another crate.
44
pub struct DependencyBuilder {
5-
explicit_name_in_toml: Option<u::EncodableDependencyName>,
5+
explicit_name_in_toml: Option<String>,
66
name: String,
77
features: Vec<String>,
88
registry: Option<String>,
@@ -23,7 +23,7 @@ impl DependencyBuilder {
2323

2424
/// Rename this dependency.
2525
pub fn rename(mut self, new_name: &str) -> Self {
26-
self.explicit_name_in_toml = Some(u::EncodableDependencyName(new_name.to_string()));
26+
self.explicit_name_in_toml = Some(new_name.to_string());
2727
self
2828
}
2929

src/tests/krate/publish/snapshots/all__krate__publish__dependencies__invalid_dependency_rename.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ expression: response.into_json()
55
{
66
"errors": [
77
{
8-
"detail": "invalid upload request: invalid value: string \"💩\", expected a valid dependency name to start with a letter or underscore, contain only letters, numbers, hyphens, or underscores and have at most 64 characters at line 1 column 197"
8+
"detail": "\"💩\" is an invalid dependency name (dependency names must start with a letter or underscore, contain only letters, numbers, hyphens, or underscores and have at most 64 characters)"
99
}
1010
]
1111
}

src/views/krate_publish.rs

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ pub struct EncodableCrateDependency {
2828
pub version_req: String,
2929
pub target: Option<String>,
3030
pub kind: Option<DependencyKind>,
31-
pub explicit_name_in_toml: Option<EncodableDependencyName>,
31+
pub explicit_name_in_toml: Option<String>,
3232
pub registry: Option<String>,
3333
}
3434

@@ -51,25 +51,6 @@ impl<'de> Deserialize<'de> for EncodableCrateName {
5151
}
5252
}
5353

54-
#[derive(Serialize, Clone, Debug, Deref)]
55-
pub struct EncodableDependencyName(pub String);
56-
57-
impl<'de> Deserialize<'de> for EncodableDependencyName {
58-
fn deserialize<D: Deserializer<'de>>(d: D) -> Result<EncodableDependencyName, D::Error> {
59-
let s = String::deserialize(d)?;
60-
if !Crate::valid_dependency_name(&s) {
61-
let value = de::Unexpected::Str(&s);
62-
let expected = format!(
63-
"a valid dependency name to start with a letter or underscore, contain only letters, \
64-
numbers, hyphens, or underscores and have at most {MAX_NAME_LENGTH} characters"
65-
);
66-
Err(de::Error::invalid_value(value, &expected.as_ref()))
67-
} else {
68-
Ok(EncodableDependencyName(s))
69-
}
70-
}
71-
}
72-
7354
#[derive(Serialize, Debug, Deref)]
7455
pub struct EncodableCrateVersion(pub semver::Version);
7556

0 commit comments

Comments
 (0)