@@ -18,9 +18,7 @@ use semver_parser;
1818
1919use self :: Op :: { Ex , Gt , GtEq , Lt , LtEq , Tilde , Compatible , Wildcard } ;
2020use self :: WildcardVersion :: { Major , Minor , Patch } ;
21- use self :: ReqParseError :: { InvalidVersionRequirement , OpAlreadySet , InvalidSigil ,
22- VersionComponentsMustBeNumeric , InvalidIdentifier , MajorVersionRequired ,
23- UnimplementedVersionRequirement } ;
21+ use self :: ReqParseError :: * ;
2422
2523/// A `VersionReq` is a struct containing a list of predicates that can apply to ranges of version
2624/// numbers. Matching operations can then be done with the `VersionReq` against a particular
@@ -100,7 +98,7 @@ impl From<semver_parser::range::Predicate> for Predicate {
10098
10199/// A `ReqParseError` is returned from methods which parse a string into a `VersionReq`. Each
102100/// enumeration is one of the possible errors that can occur.
103- #[ derive( Copy , Clone , Debug , PartialEq ) ]
101+ #[ derive( Clone , Debug , PartialEq ) ]
104102pub enum ReqParseError {
105103 /// The given version requirement is invalid.
106104 InvalidVersionRequirement ,
@@ -116,6 +114,8 @@ pub enum ReqParseError {
116114 MajorVersionRequired ,
117115 /// An unimplemented version requirement.
118116 UnimplementedVersionRequirement ,
117+ /// This form of requirement is deprecated.
118+ DeprecatedVersionRequirement ( VersionReq ) ,
119119}
120120
121121impl fmt:: Display for ReqParseError {
@@ -126,18 +126,19 @@ impl fmt::Display for ReqParseError {
126126
127127impl Error for ReqParseError {
128128 fn description ( & self ) -> & str {
129- match * self {
130- InvalidVersionRequirement => "the given version requirement is invalid" ,
131- OpAlreadySet => {
129+ match self {
130+ & InvalidVersionRequirement => "the given version requirement is invalid" ,
131+ & OpAlreadySet => {
132132 "you have already provided an operation, such as =, ~, or ^; only use one"
133- }
134- InvalidSigil => "the sigil you have written is not correct" ,
135- VersionComponentsMustBeNumeric => "version components must be numeric" ,
136- InvalidIdentifier => "invalid identifier" ,
137- MajorVersionRequired => "at least a major version number is required" ,
138- UnimplementedVersionRequirement => {
133+ } ,
134+ & InvalidSigil => "the sigil you have written is not correct" ,
135+ & VersionComponentsMustBeNumeric => "version components must be numeric" ,
136+ & InvalidIdentifier => "invalid identifier" ,
137+ & MajorVersionRequired => "at least a major version number is required" ,
138+ & UnimplementedVersionRequirement => {
139139 "the given version requirement is not implemented, yet"
140- }
140+ } ,
141+ & DeprecatedVersionRequirement ( _) => "This requirement is deprecated" ,
141142 }
142143 }
143144}
@@ -200,10 +201,26 @@ impl VersionReq {
200201 pub fn parse ( input : & str ) -> Result < VersionReq , ReqParseError > {
201202 let res = semver_parser:: range:: parse ( input) ;
202203
203- match res {
204- // Convert plain String error into proper ParseError
205- Err ( e) => Err ( From :: from ( e) ) ,
206- Ok ( v) => Ok ( From :: from ( v) ) ,
204+ if let Ok ( v) = res {
205+ return Ok ( From :: from ( v) ) ;
206+ }
207+
208+ return match VersionReq :: parse_deprecated ( input) {
209+ Some ( v) => {
210+ Err ( ReqParseError :: DeprecatedVersionRequirement ( v) )
211+ }
212+ None => Err ( From :: from ( res. err ( ) . unwrap ( ) ) ) ,
213+ }
214+ }
215+
216+ fn parse_deprecated ( version : & str ) -> Option < VersionReq > {
217+ return match version {
218+ ".*" => Some ( VersionReq :: any ( ) ) ,
219+ "0.1.0." => Some ( VersionReq :: parse ( "0.1.0" ) . unwrap ( ) ) ,
220+ "0.3.1.3" => Some ( VersionReq :: parse ( "0.3.13" ) . unwrap ( ) ) ,
221+ "0.2*" => Some ( VersionReq :: parse ( "0.2.*" ) . unwrap ( ) ) ,
222+ "*.0" => Some ( VersionReq :: any ( ) ) ,
223+ _ => None ,
207224 }
208225 }
209226
0 commit comments