11use std:: error:: Error ;
22use std:: fmt;
3+ use semver:: Version ;
34
4- #[ derive( Debug , Clone ) ]
5- pub struct Version {
6- pub major : u32 ,
7- pub minor : u32 ,
8- }
9-
10- impl Version {
11- pub fn parse ( version : & str ) -> Result < Version , VersionParseError > {
12- if version. is_empty ( ) {
13- return Err ( VersionParseError :: EmptyVersion ) ;
14- }
15- let parts: Vec < & str > = version. split ( '.' ) . collect ( ) ;
16- if parts. len ( ) < 2 {
17- return Err ( VersionParseError :: InvalidFormat ( version. to_string ( ) ) ) ;
18- }
19-
20- let major = parts[ 0 ]
21- . parse :: < u32 > ( )
22- . map_err ( |_| VersionParseError :: InvalidFormat ( version. to_string ( ) ) ) ?;
23- let minor = parts[ 1 ]
24- . parse :: < u32 > ( )
25- . map_err ( |_| VersionParseError :: InvalidFormat ( version. to_string ( ) ) ) ?;
26-
27- Ok ( Version { major, minor } )
5+ pub fn parse ( version : & str ) -> Result < Version , VersionParseError > {
6+ if version. is_empty ( ) {
7+ return Err ( VersionParseError :: EmptyVersion ) ;
8+ }
9+ match Version :: parse ( version) {
10+ Ok ( v) => Ok ( v) ,
11+ Err ( _) => Err ( VersionParseError :: InvalidFormat ( version. to_string ( ) ) ) ,
2812 }
2913}
3014
@@ -68,8 +52,8 @@ pub fn is_compatible(client_version: Option<&str>, server_version: Option<&str>)
6852 }
6953
7054 match (
71- Version :: parse ( client_version) ,
72- Version :: parse ( server_version) ,
55+ parse ( client_version) ,
56+ parse ( server_version) ,
7357 ) {
7458 ( Ok ( client) , Ok ( server) ) => {
7559 let major_dif = ( client. major as i32 - server. major as i32 ) . abs ( ) ;
@@ -92,12 +76,12 @@ mod tests {
9276 #[ test]
9377 fn test_is_compatible ( ) {
9478 let test_cases = vec ! [
95- ( Some ( "1.9.3.dev0" ) , Some ( "2.8.1.dev12-something " ) , false ) ,
79+ ( Some ( "1.9.3.dev0" ) , Some ( "2.8.1-dev12 " ) , false ) ,
9680 ( Some ( "1.9" ) , Some ( "2.8" ) , false ) ,
9781 ( Some ( "1" ) , Some ( "2" ) , false ) ,
9882 ( Some ( "1.9.0" ) , Some ( "2.9.0" ) , false ) ,
9983 ( Some ( "1.1.0" ) , Some ( "1.2.9" ) , true ) ,
100- ( Some ( "1.2.7" ) , Some ( "1.1.8. dev0" ) , true ) ,
84+ ( Some ( "1.2.7" ) , Some ( "1.1.8- dev0" ) , true ) ,
10185 ( Some ( "1.2.1" ) , Some ( "1.2.29" ) , true ) ,
10286 ( Some ( "1.2.0" ) , Some ( "1.2.0" ) , true ) ,
10387 ( Some ( "1.2.0" ) , Some ( "1.4.0" ) , false ) ,
@@ -138,7 +122,7 @@ mod tests {
138122 ] ;
139123
140124 for ( input, expected_error) in test_cases {
141- let result = Version :: parse ( input) ;
125+ let result = parse ( input) ;
142126 assert ! ( result. is_err( ) ) ;
143127 assert_eq ! ( result. unwrap_err( ) . to_string( ) , expected_error. to_string( ) ) ;
144128 }
0 commit comments