@@ -14,7 +14,7 @@ use crate::schema::*;
14
14
pub struct Version {
15
15
pub id : i32 ,
16
16
pub crate_id : i32 ,
17
- pub num : semver :: Version ,
17
+ pub num : String ,
18
18
pub updated_at : NaiveDateTime ,
19
19
pub created_at : NaiveDateTime ,
20
20
pub downloads : i32 ,
@@ -59,16 +59,26 @@ impl TopVersions {
59
59
/// highest version (in semver order) for a collection of date/version pairs.
60
60
pub fn from_date_version_pairs < T > ( pairs : T ) -> Self
61
61
where
62
- T : Clone + IntoIterator < Item = ( NaiveDateTime , semver :: Version ) > ,
62
+ T : Clone + IntoIterator < Item = ( NaiveDateTime , String ) > ,
63
63
{
64
- let newest = pairs. clone ( ) . into_iter ( ) . max ( ) . map ( |( _, v) | v) ;
65
- let highest = pairs. clone ( ) . into_iter ( ) . map ( |( _, v) | v) . max ( ) ;
64
+ // filter out versions that we can't parse
65
+ let pairs: Vec < ( NaiveDateTime , semver:: Version ) > = pairs
66
+ . into_iter ( )
67
+ . filter_map ( |( date, version) | {
68
+ semver:: Version :: parse ( & version)
69
+ . ok ( )
70
+ . map ( |version| ( date, version) )
71
+ } )
72
+ . collect ( ) ;
66
73
74
+ let newest = pairs. iter ( ) . max ( ) . map ( |( _, v) | v. clone ( ) ) ;
75
+ let highest = pairs. iter ( ) . map ( |( _, v) | v) . max ( ) . map ( |v| v. clone ( ) ) ;
67
76
let highest_stable = pairs
68
- . into_iter ( )
77
+ . iter ( )
69
78
. map ( |( _, v) | v)
70
79
. filter ( |v| !v. is_prerelease ( ) )
71
- . max ( ) ;
80
+ . max ( )
81
+ . map ( |v| v. clone ( ) ) ;
72
82
73
83
Self {
74
84
highest,
@@ -217,7 +227,7 @@ mod tests {
217
227
218
228
#[ test]
219
229
fn top_versions_single ( ) {
220
- let versions = vec ! [ ( date( "2020-12-03T12:34:56" ) , version ( "1.0.0" ) ) ] ;
230
+ let versions = vec ! [ ( date( "2020-12-03T12:34:56" ) , "1.0.0" . into ( ) ) ] ;
221
231
assert_eq ! (
222
232
TopVersions :: from_date_version_pairs( versions) ,
223
233
TopVersions {
@@ -230,7 +240,7 @@ mod tests {
230
240
231
241
#[ test]
232
242
fn top_versions_prerelease ( ) {
233
- let versions = vec ! [ ( date( "2020-12-03T12:34:56" ) , version ( "1.0.0-beta.5" ) ) ] ;
243
+ let versions = vec ! [ ( date( "2020-12-03T12:34:56" ) , "1.0.0-beta.5" . into ( ) ) ] ;
234
244
assert_eq ! (
235
245
TopVersions :: from_date_version_pairs( versions) ,
236
246
TopVersions {
@@ -244,10 +254,11 @@ mod tests {
244
254
#[ test]
245
255
fn top_versions_multiple ( ) {
246
256
let versions = vec ! [
247
- ( date( "2018-12-03T12:34:56" ) , version( "1.0.0" ) ) ,
248
- ( date( "2019-12-03T12:34:56" ) , version( "2.0.0-alpha.1" ) ) ,
249
- ( date( "2020-12-03T12:34:56" ) , version( "1.1.0" ) ) ,
250
- ( date( "2020-12-31T12:34:56" ) , version( "1.0.4" ) ) ,
257
+ ( date( "2018-12-03T12:34:56" ) , "1.0.0" . into( ) ) ,
258
+ ( date( "2019-12-03T12:34:56" ) , "2.0.0-alpha.1" . into( ) ) ,
259
+ ( date( "2020-12-01T12:34:56" ) , "everything is broken" . into( ) ) ,
260
+ ( date( "2020-12-03T12:34:56" ) , "1.1.0" . into( ) ) ,
261
+ ( date( "2020-12-31T12:34:56" ) , "1.0.4" . into( ) ) ,
251
262
] ;
252
263
assert_eq ! (
253
264
TopVersions :: from_date_version_pairs( versions) ,
0 commit comments