@@ -41,18 +41,29 @@ pub struct NewVersion {
41
41
/// Typically used for a single crate.
42
42
#[ derive( Debug , Clone , Eq , PartialEq ) ]
43
43
pub struct TopVersions {
44
- pub highest : semver:: Version ,
45
- pub newest : semver:: Version ,
44
+ /// The "highest" version in terms of semver
45
+ pub highest : Option < semver:: Version > ,
46
+ /// The "newest" version in terms of publishing date
47
+ pub newest : Option < semver:: Version > ,
46
48
}
47
49
48
- /// A default semver value, "0.0.0", for use in TopVersions
49
- fn default_semver_version ( ) -> semver:: Version {
50
- semver:: Version {
51
- major : 0 ,
52
- minor : 0 ,
53
- patch : 0 ,
54
- pre : vec ! [ ] ,
55
- build : vec ! [ ] ,
50
+ impl TopVersions {
51
+ /// Return both the newest (most recently updated) and the
52
+ /// highest version (in semver order) for a list of `Version` instances.
53
+ pub fn from_versions ( versions : Vec < Version > ) -> Self {
54
+ Self :: from_date_version_pairs ( versions. into_iter ( ) . map ( |v| ( v. created_at , v. num ) ) )
55
+ }
56
+
57
+ /// Return both the newest (most recently updated) and the
58
+ /// highest version (in semver order) for a collection of date/version pairs.
59
+ pub fn from_date_version_pairs < T > ( pairs : T ) -> Self
60
+ where
61
+ T : Clone + IntoIterator < Item = ( NaiveDateTime , semver:: Version ) > ,
62
+ {
63
+ let newest = pairs. clone ( ) . into_iter ( ) . max ( ) . map ( |( _, v) | v) ;
64
+ let highest = pairs. into_iter ( ) . map ( |( _, v) | v) . max ( ) ;
65
+
66
+ Self { newest, highest }
56
67
}
57
68
}
58
69
@@ -115,30 +126,6 @@ impl Version {
115
126
. load ( conn)
116
127
}
117
128
118
- /// Return both the newest (most recently updated) and the
119
- /// highest version (in semver order) for a collection of date/version pairs.
120
- pub fn top < T > ( pairs : T ) -> TopVersions
121
- where
122
- T : Clone + IntoIterator < Item = ( NaiveDateTime , semver:: Version ) > ,
123
- {
124
- TopVersions {
125
- newest : pairs
126
- . clone ( )
127
- . into_iter ( )
128
- . max ( )
129
- . unwrap_or ( (
130
- NaiveDateTime :: from_timestamp ( 0 , 0 ) ,
131
- default_semver_version ( ) ,
132
- ) )
133
- . 1 ,
134
- highest : pairs
135
- . into_iter ( )
136
- . map ( |( _, v) | v)
137
- . max ( )
138
- . unwrap_or_else ( default_semver_version) ,
139
- }
140
- }
141
-
142
129
pub fn record_readme_rendering ( version_id_ : i32 , conn : & PgConnection ) -> QueryResult < usize > {
143
130
use crate :: schema:: readme_renderings:: dsl:: * ;
144
131
use diesel:: dsl:: now;
@@ -255,7 +242,7 @@ impl NewVersion {
255
242
256
243
#[ cfg( test) ]
257
244
mod tests {
258
- use super :: { TopVersions , Version } ;
245
+ use super :: TopVersions ;
259
246
use chrono:: NaiveDateTime ;
260
247
261
248
#[ track_caller]
@@ -272,10 +259,10 @@ mod tests {
272
259
fn top_versions_empty ( ) {
273
260
let versions = vec ! [ ] ;
274
261
assert_eq ! (
275
- Version :: top ( versions) ,
262
+ TopVersions :: from_date_version_pairs ( versions) ,
276
263
TopVersions {
277
- highest: version ( "0.0.0" ) ,
278
- newest: version ( "0.0.0" ) ,
264
+ highest: None ,
265
+ newest: None ,
279
266
}
280
267
) ;
281
268
}
@@ -284,10 +271,10 @@ mod tests {
284
271
fn top_versions_single ( ) {
285
272
let versions = vec ! [ ( date( "2020-12-03T12:34:56" ) , version( "1.0.0" ) ) ] ;
286
273
assert_eq ! (
287
- Version :: top ( versions) ,
274
+ TopVersions :: from_date_version_pairs ( versions) ,
288
275
TopVersions {
289
- highest: version( "1.0.0" ) ,
290
- newest: version( "1.0.0" ) ,
276
+ highest: Some ( version( "1.0.0" ) ) ,
277
+ newest: Some ( version( "1.0.0" ) ) ,
291
278
}
292
279
) ;
293
280
}
@@ -300,10 +287,10 @@ mod tests {
300
287
( date( "2020-12-03T12:34:56" ) , version( "1.1.0" ) ) ,
301
288
] ;
302
289
assert_eq ! (
303
- Version :: top ( versions) ,
290
+ TopVersions :: from_date_version_pairs ( versions) ,
304
291
TopVersions {
305
- highest: version( "2.0.0-alpha.1" ) ,
306
- newest: version( "1.1.0" ) ,
292
+ highest: Some ( version( "2.0.0-alpha.1" ) ) ,
293
+ newest: Some ( version( "1.1.0" ) ) ,
307
294
}
308
295
) ;
309
296
}
0 commit comments