Skip to content

Commit ad578ab

Browse files
authored
models/version: Replace String with &str for NewVersion struct fields (#9697)
1 parent 841872d commit ad578ab

File tree

3 files changed

+28
-28
lines changed

3 files changed

+28
-28
lines changed

src/controllers/krate/publish.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -351,26 +351,26 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult<Json<GoodCra
351351
// the `name` field is required for `bin` targets, so we can ignore `None` values via
352352
// `filter_map()` here.
353353
let bin_names = tarball_info.manifest.bin
354-
.into_iter()
355-
.filter_map(|bin| bin.name.clone())
356-
.collect();
354+
.iter()
355+
.filter_map(|bin| bin.name.as_deref())
356+
.collect::<Vec<_>>();
357357

358358
// Read tarball from request
359359
let hex_cksum: String = Sha256::digest(&tarball_bytes).encode_hex();
360360

361361
// Persist the new version of this crate
362362
let version = NewVersion::builder(krate.id, &version_string)
363363
.features(&features)?
364-
.license(license)
364+
.license(license.as_deref())
365365
// Downcast is okay because the file length must be less than the max upload size
366366
// to get here, and max upload sizes are way less than i32 max
367367
.size(content_length as i32)
368368
.published_by(user.id)
369-
.checksum(hex_cksum)
370-
.links(package.links)
371-
.rust_version(rust_version)
369+
.checksum(&hex_cksum)
370+
.links(package.links.as_deref())
371+
.rust_version(rust_version.as_deref())
372372
.has_lib(tarball_info.manifest.lib.is_some())
373-
.bin_names(bin_names)
373+
.bin_names(bin_names.as_slice())
374374
.build()
375375
.map_err(|error| internal(error.to_string()))?
376376
.save(conn, &verified_email_address)?;

src/models/version.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -79,32 +79,31 @@ impl Version {
7979

8080
#[derive(Insertable, Debug, Builder)]
8181
#[diesel(table_name = versions, check_for_backend(diesel::pg::Pg))]
82-
pub struct NewVersion {
82+
pub struct NewVersion<'a> {
8383
crate_id: i32,
84-
num: String,
84+
num: &'a str,
8585
#[builder(
8686
default = "serde_json::Value::Object(Default::default())",
8787
setter(custom)
8888
)]
8989
features: serde_json::Value,
9090
#[builder(default)]
91-
license: Option<String>,
91+
license: Option<&'a str>,
9292
#[builder(default, setter(name = "size"))]
9393
crate_size: i32,
9494
published_by: i32,
95-
#[builder(setter(into))]
96-
checksum: String,
95+
checksum: &'a str,
9796
#[builder(default)]
98-
links: Option<String>,
97+
links: Option<&'a str>,
9998
#[builder(default)]
100-
rust_version: Option<String>,
99+
rust_version: Option<&'a str>,
101100
#[builder(default, setter(strip_option))]
102101
pub has_lib: Option<bool>,
103102
#[builder(default, setter(strip_option))]
104-
pub bin_names: Option<Vec<String>>,
103+
pub bin_names: Option<&'a [&'a str]>,
105104
}
106105

107-
impl NewVersionBuilder {
106+
impl NewVersionBuilder<'_> {
108107
pub fn features(
109108
&mut self,
110109
features: &BTreeMap<String, Vec<String>>,
@@ -118,15 +117,14 @@ impl NewVersionBuilder {
118117
const DUMMY_CHECKSUM: &str =
119118
"0000000000000000000000000000000000000000000000000000000000000000";
120119

121-
self.checksum = Some(DUMMY_CHECKSUM.to_string());
122-
self
120+
self.checksum(DUMMY_CHECKSUM)
123121
}
124122
}
125123

126-
impl NewVersion {
127-
pub fn builder(crate_id: i32, version: impl Into<String>) -> NewVersionBuilder {
124+
impl NewVersion<'_> {
125+
pub fn builder(crate_id: i32, version: &str) -> NewVersionBuilder<'_> {
128126
let mut builder = NewVersionBuilder::default();
129-
builder.crate_id(crate_id).num(version.into());
127+
builder.crate_id(crate_id).num(version);
130128
builder
131129
}
132130

@@ -135,7 +133,7 @@ impl NewVersion {
135133
use diesel::{insert_into, select};
136134

137135
conn.transaction(|conn| {
138-
let num_no_build = strip_build_metadata(&self.num);
136+
let num_no_build = strip_build_metadata(self.num);
139137

140138
let already_uploaded = versions::table
141139
.filter(versions::crate_id.eq(self.crate_id))

src/tests/builders/version.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,16 @@ impl VersionBuilder {
9999
) -> AppResult<Version> {
100100
use diesel::{insert_into, update};
101101

102-
let new_version = NewVersion::builder(crate_id, self.num.to_string())
102+
let version = self.num.to_string();
103+
104+
let new_version = NewVersion::builder(crate_id, &version)
103105
.features(&self.features)?
104-
.license(self.license)
106+
.license(self.license.as_deref())
105107
.size(self.size)
106108
.published_by(published_by)
107-
.checksum(self.checksum)
108-
.links(self.links)
109-
.rust_version(self.rust_version)
109+
.checksum(&self.checksum)
110+
.links(self.links.as_deref())
111+
.rust_version(self.rust_version.as_deref())
110112
.build()
111113
.map_err(|error| internal(error.to_string()))?;
112114

0 commit comments

Comments
 (0)