@@ -27,6 +27,8 @@ const EXAMPLE: &str = r#"#[wrapper(LowerHex, Add)]"#;
2727#[ derive( Copy ,  Clone ,  PartialEq ,  Eq ,  Ord ,  PartialOrd ,  Debug ) ]  
2828enum  Wrapper  { 
2929    NoRefs , 
30+     NoFrom , 
31+     From , 
3032    // Formatting 
3133    FromStr , 
3234    Display , 
@@ -126,7 +128,7 @@ impl FromPath for Wrapper {
126128    const  DERIVE :  & ' static  str  = "Wrapper" ; 
127129    const  NO_REFS :  Self  = Self :: NoRefs ; 
128130
129-     fn  default_set ( )  -> Vec < Self >  {  vec ! [ Wrapper :: AsRef ,  Wrapper :: Borrow ]  } 
131+     fn  default_set ( )  -> Vec < Self >  {  vec ! [ Wrapper :: From ,   Wrapper :: AsRef ,  Wrapper :: Borrow ]  } 
130132
131133    fn  is_not_ref ( & self )  -> bool  {  * self  != Wrapper :: AsRef  && * self  != Wrapper :: Borrow  } 
132134
@@ -135,6 +137,8 @@ impl FromPath for Wrapper {
135137            Err ( attr_err ! ( path. span( ) ,  NAME ,  "must contain at least one identifier" ,  EXAMPLE ) ) , 
136138            |segment| { 
137139                Ok ( match  segment. ident . to_string ( ) . as_str ( )  { 
140+                     "From"  => Some ( Wrapper :: From ) , 
141+                     "NoFrom"  => Some ( Wrapper :: NoFrom ) , 
138142                    "FromStr"  => Some ( Wrapper :: FromStr ) , 
139143                    "Display"  => Some ( Wrapper :: Display ) , 
140144                    "Debug"  => Some ( Wrapper :: Debug ) , 
@@ -243,6 +247,15 @@ impl Wrapper {
243247        let  amplify_crate = get_amplify_crate ( input) ; 
244248
245249        match  self  { 
250+             Wrapper :: From  => quote !  { 
251+                 #[ automatically_derived] 
252+                 impl  #impl_generics #amplify_crate:: FromInner  for  #ident_name #ty_generics #where_clause { 
253+                     #[ inline] 
254+                     fn  from_inner( inner:  Self :: Inner )  -> Self  { 
255+                         Self :: from( inner) 
256+                     } 
257+                 } 
258+             } , 
246259            Wrapper :: FromStr  => quote !  { 
247260                #[ automatically_derived] 
248261                impl  #impl_generics :: core:: str :: FromStr  for  #ident_name #ty_generics #where_clause
@@ -637,6 +650,7 @@ impl Wrapper {
637650                } 
638651            } , 
639652            Wrapper :: NoRefs  |
653+             Wrapper :: NoFrom  |
640654            Wrapper :: Hex  |
641655            Wrapper :: Exp  |
642656            Wrapper :: NumberFmt  |
@@ -998,7 +1012,13 @@ pub(crate) fn inner(input: DeriveInput) -> Result<TokenStream2> {
9981012
9991013    let  ( field,  from)  = get_params ( & input) ?; 
10001014
1001-     let  wrappers = get_wrappers :: < Wrapper > ( & input) ?; 
1015+     let  mut  wrappers = get_wrappers :: < Wrapper > ( & input) ?; 
1016+     if  wrappers. contains ( & Wrapper :: NoFrom )  { 
1017+         wrappers = wrappers
1018+             . into_iter ( ) 
1019+             . filter ( |w| * w != Wrapper :: From  && * w != Wrapper :: NoFrom ) 
1020+             . collect ( ) ; 
1021+     } 
10021022    let  wrapper_derive = wrappers
10031023        . iter ( ) 
10041024        . map ( |w| w. into_token_stream2 ( & input,  & from,  & field) ) ; 
@@ -1019,14 +1039,6 @@ pub(crate) fn inner(input: DeriveInput) -> Result<TokenStream2> {
10191039            } 
10201040        } 
10211041
1022-         #[ automatically_derived] 
1023-         impl  #impl_generics #amplify_crate:: FromInner  for  #ident_name #ty_generics #where_clause { 
1024-             #[ inline] 
1025-             fn  from_inner( inner:  Self :: Inner )  -> Self  { 
1026-                 Self :: from( inner) 
1027-             } 
1028-         } 
1029- 
10301042        #[ automatically_derived] 
10311043        impl  #impl_generics :: core:: convert:: From <#ident_name #ty_generics> for  #from #where_clause { 
10321044            #[ inline] 
0 commit comments