@@ -109,9 +109,9 @@ impl FromStr for GenesisStakingSettings {
109
109
type Err = GenesisStakingSettingsInputErrors ;
110
110
111
111
fn from_str ( settings : & str ) -> Result < Self , Self :: Err > {
112
- let mut settings_parts = settings
112
+ let settings_parts = settings
113
113
. split ( ',' )
114
- . filter_map ( |s| s. split_once ( ':' ) )
114
+ . filter_map ( |s| s. split_once ( ':' ) . or ( if s . is_empty ( ) { None } else { Some ( ( s , "" ) ) } ) )
115
115
. map ( |( k, v) | ( k. trim ( ) , v. trim ( ) ) )
116
116
. collect :: < HashMap < & str , & str > > ( ) ;
117
117
@@ -162,13 +162,25 @@ impl FromStr for GenesisStakingSettings {
162
162
163
163
impl Display for GenesisStakingSettings {
164
164
fn fmt ( & self , f : & mut Formatter ) -> std:: fmt:: Result {
165
- write ! (
166
- f,
167
- "pool_id:{},stake_private_key:{},vrf_private_key:{}" ,
168
- self . pool_id( ) . hex_encode( ) ,
169
- self . stake_private_key( ) . hex_encode( ) ,
170
- self . vrf_private_key( ) . hex_encode( )
171
- )
165
+ let mut values = vec ! [ ] ;
166
+
167
+ let pool_id = self . pool_id ( ) . hex_encode ( ) ;
168
+ let stake_private_key = self . stake_private_key ( ) . hex_encode ( ) ;
169
+ let vrf_private_key = self . vrf_private_key ( ) . hex_encode ( ) ;
170
+
171
+ if !pool_id. is_empty ( ) {
172
+ values. push ( format ! ( "pool_id:{}" , pool_id) )
173
+ }
174
+
175
+ if !stake_private_key. is_empty ( ) {
176
+ values. push ( format ! ( "stake_private_key:{}" , stake_private_key) )
177
+ }
178
+
179
+ if !vrf_private_key. is_empty ( ) {
180
+ values. push ( format ! ( "vrf_private_key:{}" , vrf_private_key) )
181
+ }
182
+
183
+ write ! ( f, "{}" , values. join( "," ) )
172
184
}
173
185
}
174
186
@@ -263,6 +275,32 @@ mod test {
263
275
) ;
264
276
}
265
277
278
+ #[ test]
279
+ fn missing_value ( ) {
280
+ let result = GenesisStakingSettings :: from_str ( "key" ) ;
281
+
282
+ assert_eq ! (
283
+ result,
284
+ Err ( GenesisStakingSettingsInputErrors :: UnknownParameter (
285
+ "key" . to_string( )
286
+ ) ) ,
287
+ "Missing value was valid"
288
+ ) ;
289
+ }
290
+
291
+ #[ test]
292
+ fn empty_value ( ) {
293
+ let result = GenesisStakingSettings :: from_str ( "key:" ) ;
294
+
295
+ assert_eq ! (
296
+ result,
297
+ Err ( GenesisStakingSettingsInputErrors :: UnknownParameter (
298
+ "key" . to_string( )
299
+ ) ) ,
300
+ "Empty value was valid"
301
+ ) ;
302
+ }
303
+
266
304
#[ test]
267
305
fn invalid_pool_id ( ) {
268
306
let result = GenesisStakingSettings :: from_str ( "pool_id:invalid_value" ) ;
0 commit comments