@@ -421,6 +421,23 @@ fn gen_from_subcommand(
421421 }
422422}
423423
424+ #[ cfg( feature = "paw" ) ]
425+ fn gen_paw_impl ( name : & Ident ) -> TokenStream {
426+ quote ! {
427+ impl paw:: ParseArgs for #name {
428+ type Error = std:: io:: Error ;
429+
430+ fn parse_args( ) -> Result <Self , Self :: Error > {
431+ Ok ( <#name as :: structopt:: StructOpt >:: from_args( ) )
432+ }
433+ }
434+ }
435+ }
436+ #[ cfg( not( feature = "paw" ) ) ]
437+ fn gen_paw_impl ( _: & Ident ) -> TokenStream {
438+ TokenStream :: new ( )
439+ }
440+
424441fn impl_structopt_for_struct (
425442 name : & Ident ,
426443 fields : & Punctuated < Field , Comma > ,
@@ -429,6 +446,7 @@ fn impl_structopt_for_struct(
429446 let basic_clap_app_gen = gen_clap_struct ( attrs) ;
430447 let augment_clap = gen_augment_clap ( fields, & basic_clap_app_gen. attrs ) ;
431448 let from_clap = gen_from_clap ( name, fields, & basic_clap_app_gen. attrs ) ;
449+ let paw_impl = gen_paw_impl ( name) ;
432450
433451 let clap_tokens = basic_clap_app_gen. tokens ;
434452 quote ! {
@@ -444,6 +462,8 @@ fn impl_structopt_for_struct(
444462 #augment_clap
445463 pub fn is_subcommand( ) -> bool { false }
446464 }
465+
466+ #paw_impl
447467 }
448468}
449469
@@ -457,6 +477,7 @@ fn impl_structopt_for_enum(
457477 let augment_clap = gen_augment_clap_enum ( variants, & basic_clap_app_gen. attrs ) ;
458478 let from_clap = gen_from_clap_enum ( name) ;
459479 let from_subcommand = gen_from_subcommand ( name, variants, & basic_clap_app_gen. attrs ) ;
480+ let paw_impl = gen_paw_impl ( name) ;
460481
461482 let clap_tokens = basic_clap_app_gen. tokens ;
462483 quote ! {
@@ -472,6 +493,8 @@ fn impl_structopt_for_enum(
472493 #from_subcommand
473494 pub fn is_subcommand( ) -> bool { true }
474495 }
496+
497+ #paw_impl
475498 }
476499}
477500
0 commit comments