1- use crate :: utils :: Dependency ;
1+ use cargo_metadata :: { Dependency , DependencyBuilder , DependencyKind } ;
22use derive_more:: Deref ;
33use semver:: VersionReq ;
44use serde:: { Deserialize , Serialize } ;
55
6- const DEFAULT_KIND : & str = "normal" ;
7-
86/// The three possible representations of a dependency in our internal JSON format
97/// in the `releases.dependencies` column.
108#[ derive( Debug , Clone , Serialize , Deserialize ) ]
119#[ serde( untagged) ]
1210enum Dep {
1311 Two ( ( String , VersionReq ) ) ,
14- Three ( ( String , VersionReq , String ) ) ,
15- Four ( ( String , VersionReq , String , bool ) ) ,
12+ Three ( ( String , VersionReq , DependencyKind ) ) ,
13+ Four ( ( String , VersionReq , DependencyKind , bool ) ) ,
1614}
1715
16+ // FIXME: open question: should we use `cargo_metadata::Dependency` here? We would insert
17+ // many default values like default-features, registry, rename, etc,
18+ // that we don't have in the database.
19+
1820/// A crate dependency in our internal representation for releases.dependencies json.
1921#[ derive( Debug , Clone , Serialize , Deserialize , PartialEq , Deref ) ]
2022#[ serde( from = "Dep" , into = "Dep" ) ]
@@ -23,31 +25,35 @@ pub(crate) struct ReleaseDependency(Dependency);
2325impl From < Dep > for ReleaseDependency {
2426 fn from ( src : Dep ) -> Self {
2527 let ( name, req, kind, optional) = match src {
26- Dep :: Two ( ( name, req) ) => ( name, req, DEFAULT_KIND . into ( ) , false ) ,
28+ Dep :: Two ( ( name, req) ) => ( name, req, DependencyKind :: default ( ) , false ) ,
2729 Dep :: Three ( ( name, req, kind) ) => ( name, req, kind, false ) ,
2830 Dep :: Four ( ( name, req, kind, optional) ) => ( name, req, kind, optional) ,
2931 } ;
3032
31- ReleaseDependency ( Dependency {
32- name,
33- req,
34- kind : Some ( kind) ,
35- optional,
36- rename : None ,
37- } )
33+ ReleaseDependency (
34+ DependencyBuilder :: default ( )
35+ . name ( name)
36+ . source ( None )
37+ . req ( req)
38+ . kind ( kind)
39+ . optional ( optional)
40+ . uses_default_features ( false )
41+ . features ( vec ! [ ] )
42+ . target ( None )
43+ . rename ( None )
44+ . registry ( None )
45+ . path ( None )
46+ . build ( )
47+ . expect ( "we know the data is correct" ) ,
48+ )
3849 }
3950}
4051
4152impl From < ReleaseDependency > for Dep {
4253 // dependency serialization for new releases.
4354 fn from ( rd : ReleaseDependency ) -> Self {
4455 let d = rd. 0 ;
45- Dep :: Four ( (
46- d. name ,
47- d. req ,
48- d. kind . unwrap_or_else ( || DEFAULT_KIND . into ( ) ) ,
49- d. optional ,
50- ) )
56+ Dep :: Four ( ( d. name , d. req , d. kind , d. optional ) )
5157 }
5258}
5359
0 commit comments