@@ -13,6 +13,7 @@ use cargo::{
1313 util:: { Config , VersionExt } ,
1414} ;
1515use itertools:: Itertools ;
16+ use semver:: Version ;
1617use serde:: { Deserialize , Serialize } ;
1718use std:: {
1819 collections:: { BTreeMap , BTreeSet , HashSet } ,
@@ -39,7 +40,7 @@ struct Crate {
3940#[ derive( Debug , Serialize ) ]
4041pub struct CrateInformation {
4142 pub name : String ,
42- pub version : String ,
43+ pub version : Version ,
4344 pub id : String ,
4445}
4546
@@ -58,18 +59,25 @@ pub struct DependencySpec {
5859 #[ serde( skip_serializing_if = "String::is_empty" ) ]
5960 pub package : String ,
6061 #[ serde( serialize_with = "exact_version" ) ]
61- pub version : String ,
62+ pub version : Version ,
6263 #[ serde( skip_serializing_if = "Vec::is_empty" ) ]
6364 pub features : Vec < String > ,
6465 #[ serde( skip_serializing_if = "is_true" ) ]
6566 pub default_features : bool ,
6667}
6768
68- fn exact_version < S > ( version : & String , serializer : S ) -> Result < S :: Ok , S :: Error >
69+ fn exact_version < S > ( version : & Version , serializer : S ) -> Result < S :: Ok , S :: Error >
6970where
7071 S : serde:: Serializer ,
7172{
72- format ! ( "={}" , version) . serialize ( serializer)
73+ semver:: Comparator {
74+ op : semver:: Op :: Exact ,
75+ major : version. major ,
76+ minor : Some ( version. minor ) ,
77+ patch : Some ( version. patch ) ,
78+ pre : version. pre . clone ( ) ,
79+ }
80+ . serialize ( serializer)
7381}
7482
7583fn is_true ( b : & bool ) -> bool {
@@ -385,15 +393,15 @@ pub fn generate_info(
385393 exposed_name. clone ( ) ,
386394 DependencySpec {
387395 package : name. to_string ( ) ,
388- version : version. to_string ( ) ,
396+ version : version. clone ( ) ,
389397 features,
390398 default_features,
391399 } ,
392400 ) ;
393401
394402 infos. push ( CrateInformation {
395403 name : name. to_string ( ) ,
396- version : version. to_string ( ) ,
404+ version : version. clone ( ) ,
397405 id : exposed_name,
398406 } ) ;
399407
0 commit comments