1313// See the License for the specific language governing permissions and
1414// limitations under the License.
1515
16+ use std:: str:: FromStr ;
17+
1618use serde:: Serialize ;
1719use serialization:: { Decode , Encode } ;
1820
@@ -33,16 +35,10 @@ impl SemVer {
3335 }
3436}
3537
36- impl From < SemVer > for String {
37- fn from ( v : SemVer ) -> String {
38- format ! ( "{}.{}.{}" , v. major, v. minor, v. patch)
39- }
40- }
41-
42- impl TryFrom < & str > for SemVer {
43- type Error = & ' static str ;
38+ impl FromStr for SemVer {
39+ type Err = & ' static str ;
4440
45- fn try_from ( v : & str ) -> Result < SemVer , Self :: Error > {
41+ fn from_str ( v : & str ) -> Result < SemVer , Self :: Err > {
4642 let split_version = v. split ( '.' ) . collect :: < Vec < _ > > ( ) ;
4743 if split_version. len ( ) != 3 {
4844 return Err ( "Invalid version. Number of components is wrong." ) ;
@@ -61,20 +57,22 @@ impl TryFrom<&str> for SemVer {
6157 }
6258}
6359
64- impl TryFrom < String > for SemVer {
65- type Error = & ' static str ;
66-
67- fn try_from ( v : String ) -> Result < SemVer , Self :: Error > {
68- Self :: try_from ( v. as_str ( ) )
69- }
70- }
71-
7260impl std:: fmt:: Display for SemVer {
7361 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
7462 write ! ( f, "{}.{}.{}" , self . major, self . minor, self . patch)
7563 }
7664}
7765
66+ // TODO: this is redundant, but it's still used inside a macro in `regtest_chain_config_builder`.
67+ // Refactor the macro and remove this.
68+ impl TryFrom < String > for SemVer {
69+ type Error = <SemVer as FromStr >:: Err ;
70+
71+ fn try_from ( v : String ) -> Result < SemVer , Self :: Error > {
72+ Self :: from_str ( v. as_str ( ) )
73+ }
74+ }
75+
7876#[ cfg( test) ]
7977mod tests {
8078 use super :: * ;
@@ -84,84 +82,90 @@ mod tests {
8482 #[ test]
8583 fn vertest_string ( ) {
8684 let version = SemVer :: new ( 1 , 2 , 3 ) ;
87- assert_eq ! ( String :: from ( version) , "1.2.3" ) ;
85+ assert_eq ! ( version. to_string ( ) , "1.2.3" ) ;
8886
8987 let version = SemVer :: new ( 0xff , 0xff , 0xff ) ;
90- assert_eq ! ( String :: from ( version) , "255.255.255" ) ;
88+ assert_eq ! ( version. to_string ( ) , "255.255.255" ) ;
9189
9290 let version = SemVer :: new ( 0xff , 0xff , 0xffff ) ;
93- assert_eq ! ( String :: from ( version) , "255.255.65535" ) ;
91+ assert_eq ! ( version. to_string ( ) , "255.255.65535" ) ;
9492
9593 let version = SemVer :: new ( 1 , 2 , 0x500 ) ;
96- assert_eq ! ( String :: from ( version) , "1.2.1280" ) ;
94+ assert_eq ! ( version. to_string ( ) , "1.2.1280" ) ;
9795
9896 assert_eq ! (
99- SemVer :: try_from ( " " ) ,
97+ SemVer :: from_str ( " " ) ,
10098 Err ( "Invalid version. Number of components is wrong." )
10199 ) ;
102100
103101 assert_eq ! (
104- SemVer :: try_from ( "" ) ,
102+ SemVer :: from_str ( "" ) ,
105103 Err ( "Invalid version. Number of components is wrong." )
106104 ) ;
107105
108106 assert_eq ! (
109- SemVer :: try_from ( "1.2" ) ,
107+ SemVer :: from_str ( "1.2" ) ,
110108 Err ( "Invalid version. Number of components is wrong." )
111109 ) ;
112110
113111 assert_eq ! (
114- SemVer :: try_from ( "1" ) ,
112+ SemVer :: from_str ( "1" ) ,
115113 Err ( "Invalid version. Number of components is wrong." )
116114 ) ;
117115
118116 let version = "hello" ;
119117 assert_eq ! (
120- SemVer :: try_from ( version) ,
118+ SemVer :: from_str ( version) ,
121119 Err ( "Invalid version. Number of components is wrong." )
122120 ) ;
123121 assert_eq ! (
124- SemVer :: try_from ( version) ,
122+ SemVer :: from_str ( version) ,
125123 Err ( "Invalid version. Number of components is wrong." )
126124 ) ;
127125
128- let version = "1.2.3" . to_string ( ) ;
129- assert_eq ! ( SemVer :: try_from( version. clone( ) ) , Ok ( SemVer :: new( 1 , 2 , 3 ) ) ) ;
130- assert_eq ! ( SemVer :: try_from( version) , Ok ( SemVer :: new( 1 , 2 , 3 ) ) ) ;
126+ let version = "1.2.3" ;
127+ assert_eq ! ( SemVer :: from_str( version) , Ok ( SemVer :: new( 1 , 2 , 3 ) ) ) ;
128+ assert_eq ! (
129+ SemVer :: try_from( version. to_owned( ) ) ,
130+ Ok ( SemVer :: new( 1 , 2 , 3 ) )
131+ ) ;
131132
132133 let version = "255.255.255" ;
133- assert_eq ! ( SemVer :: try_from( version) , Ok ( SemVer :: new( 255 , 255 , 255 ) ) ) ;
134- assert_eq ! ( SemVer :: try_from( version) , Ok ( SemVer :: new( 255 , 255 , 255 ) ) ) ;
134+ assert_eq ! ( SemVer :: from_str( version) , Ok ( SemVer :: new( 255 , 255 , 255 ) ) ) ;
135+ assert_eq ! (
136+ SemVer :: try_from( version. to_owned( ) ) ,
137+ Ok ( SemVer :: new( 255 , 255 , 255 ) )
138+ ) ;
135139
136- let version = "255.255.65535" . to_string ( ) ;
140+ let version = "255.255.65535" ;
141+ assert_eq ! ( SemVer :: from_str( version) , Ok ( SemVer :: new( 255 , 255 , 65535 ) ) ) ;
137142 assert_eq ! (
138- SemVer :: try_from( version. clone ( ) ) ,
143+ SemVer :: try_from( version. to_owned ( ) ) ,
139144 Ok ( SemVer :: new( 255 , 255 , 65535 ) )
140145 ) ;
141- assert_eq ! ( SemVer :: try_from( version) , Ok ( SemVer :: new( 255 , 255 , 65535 ) ) ) ;
142146
143147 let version = "255.255.65536" ;
144148 assert_eq ! (
145- SemVer :: try_from ( version) ,
149+ SemVer :: from_str ( version) ,
146150 Err ( "Parsing SemVer component to integer failed" )
147151 ) ;
148152 assert_eq ! (
149- SemVer :: try_from( version. to_string ( ) ) ,
153+ SemVer :: try_from( version. to_owned ( ) ) ,
150154 Err ( "Parsing SemVer component to integer failed" )
151155 ) ;
152156
153157 assert_eq ! (
154- SemVer :: try_from ( "1.2.a" ) ,
158+ SemVer :: from_str ( "1.2.a" ) ,
155159 Err ( "Parsing SemVer component to integer failed" )
156160 ) ;
157161
158162 assert_eq ! (
159- SemVer :: try_from ( "1.2." ) ,
163+ SemVer :: from_str ( "1.2." ) ,
160164 Err ( "Parsing SemVer component to integer failed" )
161165 ) ;
162166
163167 assert_eq ! (
164- SemVer :: try_from ( "1..3" ) ,
168+ SemVer :: from_str ( "1..3" ) ,
165169 Err ( "Parsing SemVer component to integer failed" )
166170 ) ;
167171 }
0 commit comments