Skip to content

Commit 201fe6f

Browse files
committed
views: Implement from() methods for EncodableCrate
1 parent e585006 commit 201fe6f

File tree

5 files changed

+58
-25
lines changed

5 files changed

+58
-25
lines changed

src/controllers/krate/metadata.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,13 @@ pub fn summary(req: &mut dyn RequestExt) -> EndpointResult {
4141
.zip(krates)
4242
.zip(recent_downloads)
4343
.map(|((top_versions, krate), recent_downloads)| {
44-
Ok(krate.minimal_encodable(&top_versions, None, false, recent_downloads))
44+
Ok(EncodableCrate::from_minimal(
45+
krate,
46+
&top_versions,
47+
None,
48+
false,
49+
recent_downloads,
50+
))
4551
})
4652
.collect()
4753
};
@@ -165,7 +171,8 @@ pub fn show(req: &mut dyn RequestExt) -> EndpointResult {
165171
categories: Vec<EncodableCategory>,
166172
}
167173
Ok(req.json(&R {
168-
krate: krate.clone().encodable(
174+
krate: EncodableCrate::from(
175+
krate.clone(),
169176
&top_versions,
170177
Some(ids),
171178
Some(&kws),

src/controllers/krate/publish.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use crate::models::{
1414

1515
use crate::render;
1616
use crate::util::{read_fill, read_le_u32, Maximums};
17-
use crate::views::{EncodableCrateUpload, GoodCrate, PublishWarnings};
17+
use crate::views::{EncodableCrate, EncodableCrateUpload, GoodCrate, PublishWarnings};
1818

1919
pub const MISSING_RIGHTS_ERROR_MESSAGE: &str =
2020
"this crate exists but you don't seem to be an owner. \
@@ -218,7 +218,7 @@ pub fn publish(req: &mut dyn RequestExt) -> EndpointResult {
218218
};
219219

220220
Ok(req.json(&GoodCrate {
221-
krate: krate.minimal_encodable(&top_versions, None, false, None),
221+
krate: EncodableCrate::from_minimal(krate, &top_versions, None, false, None),
222222
warnings,
223223
}))
224224
})

src/controllers/krate/search.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,8 @@ pub fn search(req: &mut dyn RequestExt) -> EndpointResult {
226226
.zip(badges)
227227
.map(
228228
|((((max_version, krate), perfect_match), recent_downloads), badges)| {
229-
krate.minimal_encodable(
229+
EncodableCrate::from_minimal(
230+
krate,
230231
&max_version,
231232
Some(badges),
232233
perfect_match,

src/models/krate.rs

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -296,24 +296,6 @@ impl Crate {
296296
&& prefix_part.map_or(true, Crate::valid_feature_prefix)
297297
}
298298

299-
pub fn minimal_encodable(
300-
self,
301-
top_versions: &TopVersions,
302-
badges: Option<Vec<Badge>>,
303-
exact_match: bool,
304-
recent_downloads: Option<i64>,
305-
) -> EncodableCrate {
306-
self.encodable(
307-
top_versions,
308-
None,
309-
None,
310-
None,
311-
badges,
312-
exact_match,
313-
recent_downloads,
314-
)
315-
}
316-
317299
#[allow(clippy::too_many_arguments)]
318300
pub fn encodable(
319301
self,

src/views.rs

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use std::collections::HashMap;
44

55
use crate::github;
66
use crate::models::{
7-
Badge, Category, CrateOwnerInvitation, CreatedApiToken, Dependency, DependencyKind, Keyword,
8-
Owner, ReverseDependency, Team, User, Version, VersionDownload, VersionOwnerAction,
7+
Badge, Category, Crate, CrateOwnerInvitation, CreatedApiToken, Dependency, DependencyKind,
8+
Keyword, Owner, ReverseDependency, Team, User, Version, VersionDownload, VersionOwnerAction,
99
};
1010
use crate::util::rfc3339;
1111

@@ -205,6 +205,49 @@ pub struct EncodableCrate {
205205
pub exact_match: bool,
206206
}
207207

208+
impl EncodableCrate {
209+
#[allow(clippy::too_many_arguments)]
210+
pub fn from(
211+
krate: Crate,
212+
top_versions: &TopVersions,
213+
versions: Option<Vec<i32>>,
214+
keywords: Option<&[Keyword]>,
215+
categories: Option<&[Category]>,
216+
badges: Option<Vec<Badge>>,
217+
exact_match: bool,
218+
recent_downloads: Option<i64>,
219+
) -> Self {
220+
krate.encodable(
221+
top_versions,
222+
versions,
223+
keywords,
224+
categories,
225+
badges,
226+
exact_match,
227+
recent_downloads,
228+
)
229+
}
230+
231+
pub fn from_minimal(
232+
krate: Crate,
233+
top_versions: &TopVersions,
234+
badges: Option<Vec<Badge>>,
235+
exact_match: bool,
236+
recent_downloads: Option<i64>,
237+
) -> Self {
238+
Self::from(
239+
krate,
240+
top_versions,
241+
None,
242+
None,
243+
None,
244+
badges,
245+
exact_match,
246+
recent_downloads,
247+
)
248+
}
249+
}
250+
208251
#[derive(Serialize, Deserialize, Debug)]
209252
pub struct EncodableCrateLinks {
210253
pub version_downloads: String,

0 commit comments

Comments
 (0)