11use  { 
2-     crate :: { admin_rpc_service,  cli :: DefaultArgs } , 
2+     crate :: { admin_rpc_service,  commands :: FromClapArgMatches } , 
33    clap:: { App ,  Arg ,  ArgMatches ,  SubCommand } , 
44    std:: path:: Path , 
55} ; 
66
7- pub  fn  command ( _default_args :  & DefaultArgs )  -> App < ' _ ,  ' _ >  { 
8-     SubCommand :: with_name ( "staked-nodes-overrides" ) 
7+ const  COMMAND :  & str  = "staked-nodes-overrides" ; 
8+ 
9+ #[ derive( Debug ,  PartialEq ) ]  
10+ pub  struct  StakedNodesOverridesArgs  { 
11+     pub  path :  String , 
12+ } 
13+ 
14+ impl  FromClapArgMatches  for  StakedNodesOverridesArgs  { 
15+     fn  from_clap_arg_match ( matches :  & ArgMatches )  -> Result < Self ,  String >  { 
16+         Ok ( StakedNodesOverridesArgs  { 
17+             path :  matches
18+                 . value_of ( "path" ) 
19+                 . expect ( "path is required" ) 
20+                 . to_string ( ) , 
21+         } ) 
22+     } 
23+ } 
24+ 
25+ pub  fn  command < ' a > ( )  -> App < ' a ,  ' a >  { 
26+     SubCommand :: with_name ( COMMAND ) 
927        . about ( "Overrides stakes of specific node identities." ) 
1028        . arg ( 
1129            Arg :: with_name ( "path" ) 
@@ -22,15 +40,44 @@ pub fn command(_default_args: &DefaultArgs) -> App<'_, '_> {
2240} 
2341
2442pub  fn  execute ( matches :  & ArgMatches ,  ledger_path :  & Path )  -> Result < ( ) ,  String >  { 
25-     let  path  = matches . value_of ( "path" ) . expect ( "path is required" ) ; 
43+     let  staked_nodes_overrides_args  = StakedNodesOverridesArgs :: from_clap_arg_match ( matches ) ? ; 
2644
2745    let  admin_client = admin_rpc_service:: connect ( ledger_path) ; 
2846    admin_rpc_service:: runtime ( ) 
2947        . block_on ( async  move  { 
3048            admin_client
3149                . await ?
32-                 . set_staked_nodes_overrides ( path . to_string ( ) ) 
50+                 . set_staked_nodes_overrides ( staked_nodes_overrides_args . path ) 
3351                . await 
3452        } ) 
3553        . map_err ( |err| format ! ( "set staked nodes override request failed: {err}" ) ) 
3654} 
55+ 
56+ #[ cfg( test) ]  
57+ mod  tests { 
58+     use  { 
59+         super :: * , 
60+         crate :: commands:: tests:: { 
61+             verify_args_struct_by_command,  verify_args_struct_by_command_is_error, 
62+         } , 
63+     } ; 
64+ 
65+     #[ test]  
66+     fn  verify_args_struct_by_command_staked_nodes_overrides_default ( )  { 
67+         verify_args_struct_by_command_is_error :: < StakedNodesOverridesArgs > ( 
68+             command ( ) , 
69+             vec ! [ COMMAND ] , 
70+         ) ; 
71+     } 
72+ 
73+     #[ test]  
74+     fn  verify_args_struct_by_command_staked_nodes_overrides_path ( )  { 
75+         verify_args_struct_by_command ( 
76+             command ( ) , 
77+             vec ! [ COMMAND ,  "test.json" ] , 
78+             StakedNodesOverridesArgs  { 
79+                 path :  "test.json" . to_string ( ) , 
80+             } , 
81+         ) ; 
82+     } 
83+ } 
0 commit comments