Skip to content

Commit 30833f8

Browse files
committed
models/version: Replace derive_builder with bon
1 parent 0569bc7 commit 30833f8

File tree

5 files changed

+18
-55
lines changed

5 files changed

+18
-55
lines changed

src/controllers/krate/publish.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -360,19 +360,18 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult<Json<GoodCra
360360

361361
// Persist the new version of this crate
362362
let version = NewVersion::builder(krate.id, &version_string)
363-
.features(&features)?
364-
.license(license.as_deref())
363+
.features(serde_json::to_value(&features)?)
364+
.maybe_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)
369369
.checksum(&hex_cksum)
370-
.links(package.links.as_deref())
371-
.rust_version(rust_version.as_deref())
370+
.maybe_links(package.links.as_deref())
371+
.maybe_rust_version(rust_version.as_deref())
372372
.has_lib(tarball_info.manifest.lib.is_some())
373373
.bin_names(bin_names.as_slice())
374374
.build()
375-
.map_err(|error| internal(error.to_string()))?
376375
.save(conn, &verified_email_address)?;
377376

378377
insert_version_owner_action(

src/models/version.rs

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use std::collections::BTreeMap;
22

3+
use bon::Builder;
34
use chrono::NaiveDateTime;
45
use crates_io_index::features::FeaturesMap;
5-
use derive_builder::Builder;
66
use diesel::prelude::*;
77
use serde::Deserialize;
88

@@ -80,58 +80,26 @@ impl Version {
8080
#[derive(Insertable, Debug, Builder)]
8181
#[diesel(table_name = versions, check_for_backend(diesel::pg::Pg))]
8282
pub struct NewVersion<'a> {
83+
#[builder(start_fn)]
8384
crate_id: i32,
85+
#[builder(start_fn)]
8486
num: &'a str,
85-
#[builder(default)]
8687
created_at: Option<&'a NaiveDateTime>,
87-
#[builder(default, setter(strip_option))]
8888
yanked: Option<bool>,
89-
#[builder(
90-
default = "serde_json::Value::Object(Default::default())",
91-
setter(custom)
92-
)]
89+
#[builder(default = serde_json::Value::Object(Default::default()))]
9390
features: serde_json::Value,
94-
#[builder(default)]
9591
license: Option<&'a str>,
96-
#[builder(default, setter(name = "size"))]
92+
#[builder(default, name = "size")]
9793
crate_size: i32,
9894
published_by: i32,
9995
checksum: &'a str,
100-
#[builder(default)]
10196
links: Option<&'a str>,
102-
#[builder(default)]
10397
rust_version: Option<&'a str>,
104-
#[builder(default, setter(strip_option))]
10598
pub has_lib: Option<bool>,
106-
#[builder(default, setter(strip_option))]
10799
pub bin_names: Option<&'a [&'a str]>,
108100
}
109101

110-
impl NewVersionBuilder<'_> {
111-
pub fn features(
112-
&mut self,
113-
features: &BTreeMap<String, Vec<String>>,
114-
) -> serde_json::Result<&mut Self> {
115-
self.features = Some(serde_json::to_value(features)?);
116-
Ok(self)
117-
}
118-
119-
/// Set the `checksum` field to a basic dummy value.
120-
pub fn dummy_checksum(&mut self) -> &mut Self {
121-
const DUMMY_CHECKSUM: &str =
122-
"0000000000000000000000000000000000000000000000000000000000000000";
123-
124-
self.checksum(DUMMY_CHECKSUM)
125-
}
126-
}
127-
128102
impl NewVersion<'_> {
129-
pub fn builder(crate_id: i32, version: &str) -> NewVersionBuilder<'_> {
130-
let mut builder = NewVersionBuilder::default();
131-
builder.crate_id(crate_id).num(version);
132-
builder
133-
}
134-
135103
pub fn save(&self, conn: &mut impl Conn, published_by_email: &str) -> AppResult<Version> {
136104
use diesel::dsl::exists;
137105
use diesel::{insert_into, select};

src/tests/builders/version.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use crate::{
55
};
66
use std::collections::BTreeMap;
77

8-
use crate::util::errors::internal;
98
use chrono::NaiveDateTime;
109
use diesel::prelude::*;
1110

@@ -102,17 +101,16 @@ impl VersionBuilder {
102101
let version = self.num.to_string();
103102

104103
let new_version = NewVersion::builder(crate_id, &version)
105-
.features(&self.features)?
106-
.license(self.license.as_deref())
104+
.features(serde_json::to_value(&self.features)?)
105+
.maybe_license(self.license.as_deref())
107106
.size(self.size)
108107
.published_by(published_by)
109108
.checksum(&self.checksum)
110-
.links(self.links.as_deref())
111-
.rust_version(self.rust_version.as_deref())
109+
.maybe_links(self.links.as_deref())
110+
.maybe_rust_version(self.rust_version.as_deref())
112111
.yanked(self.yanked)
113-
.created_at(self.created_at.as_ref())
114-
.build()
115-
.map_err(|error| internal(error.to_string()))?;
112+
.maybe_created_at(self.created_at.as_ref())
113+
.build();
116114

117115
let vers = new_version.save(connection, "[email protected]")?;
118116

src/typosquat/test_util.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,8 @@ pub mod faker {
5353

5454
let version = NewVersion::builder(krate.id, "1.0.0")
5555
.published_by(user.id)
56-
.dummy_checksum()
56+
.checksum("0000000000000000000000000000000000000000000000000000000000000000")
5757
.build()
58-
.unwrap()
5958
.save(conn, "[email protected]")
6059
.unwrap();
6160

src/worker/jobs/downloads/update_metadata.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,8 @@ mod tests {
126126

127127
let version = NewVersion::builder(krate.id, "1.0.0")
128128
.published_by(user_id)
129-
.dummy_checksum()
130-
.build()
131-
.unwrap();
129+
.checksum("0000000000000000000000000000000000000000000000000000000000000000")
130+
.build();
132131

133132
let version = version.save(conn, "[email protected]").unwrap();
134133
(krate, version)

0 commit comments

Comments
 (0)