Skip to content

Commit d6ed6fa

Browse files
committed
Refactor Encapsulate derive macro
1 parent 4ab4e7c commit d6ed6fa

File tree

3 files changed

+49
-22
lines changed

3 files changed

+49
-22
lines changed

macros/src/config.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ pub(crate) struct EnumConfig {
6464
}
6565

6666
impl EnumConfig {
67+
pub fn is_included(&self, name: &str) -> bool {
68+
!self.is_excluded(name)
69+
}
70+
6771
pub fn is_excluded(&self, name: &str) -> bool {
6872
self.exclude
6973
.as_ref()

macros/src/enum_deriver.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,50 @@ impl EnumDeriver {
635635
})
636636
}
637637

638+
pub fn derive_encapsulate(&self) -> Result<TokenStream2, syn::Error> {
639+
let enum_config = config_for_enum(&self.item)?;
640+
641+
let from = enum_config
642+
.is_included(macro_name::FROM)
643+
.then_some(self.derive_from()?);
644+
let try_into = enum_config
645+
.is_included(macro_name::TRY_INTO)
646+
.then_some(self.derive_try_into()?);
647+
let from_variant = enum_config
648+
.is_included(macro_name::FROM_VARIANT)
649+
.then_some(self.derive_from_variant()?);
650+
let as_variant = enum_config
651+
.is_included(macro_name::AS_VARIANT)
652+
.then_some(self.derive_as_variant()?);
653+
let as_variant_ref = enum_config
654+
.is_included(macro_name::AS_VARIANT_REF)
655+
.then_some(self.derive_as_variant_ref()?);
656+
let as_variant_mut = enum_config
657+
.is_included(macro_name::AS_VARIANT_MUT)
658+
.then_some(self.derive_as_variant_mut()?);
659+
let into_variant = enum_config
660+
.is_included(macro_name::INTO_VARIANT)
661+
.then_some(self.derive_into_variant()?);
662+
let variant_downcast = enum_config
663+
.is_included(macro_name::VARIANT_DOWNCAST)
664+
.then_some(self.derive_variant_downcast()?);
665+
let variant_discriminant = enum_config
666+
.is_included(macro_name::VARIANT_DISCRIMINANT)
667+
.then_some(self.derive_variant_discriminant()?);
668+
669+
Ok(quote::quote! {
670+
#from
671+
#try_into
672+
#from_variant
673+
#as_variant
674+
#as_variant_ref
675+
#as_variant_mut
676+
#into_variant
677+
#variant_downcast
678+
#variant_discriminant
679+
})
680+
}
681+
638682
fn uses_generic_const_or_type(&self, ty: &syn::Type) -> bool {
639683
let mut visitor = TypeVisitor::new(&self.item.generics);
640684

macros/src/lib.rs

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -387,27 +387,6 @@ pub fn derive_encapsulate(input: TokenStream) -> TokenStream {
387387

388388
tokenstream(|| {
389389
let deriver = EnumDeriver::from(item);
390-
391-
let from = deriver.derive_from()?;
392-
let try_into = deriver.derive_try_into()?;
393-
let from_variant = deriver.derive_from_variant()?;
394-
let as_variant = deriver.derive_as_variant()?;
395-
let as_variant_ref = deriver.derive_as_variant_ref()?;
396-
let as_variant_mut = deriver.derive_as_variant_mut()?;
397-
let into_variant = deriver.derive_into_variant()?;
398-
let variant_downcast = deriver.derive_variant_downcast()?;
399-
let variant_discriminant = deriver.derive_variant_discriminant()?;
400-
401-
Ok(quote::quote! {
402-
#from
403-
#try_into
404-
#from_variant
405-
#as_variant
406-
#as_variant_ref
407-
#as_variant_mut
408-
#into_variant
409-
#variant_downcast
410-
#variant_discriminant
411-
})
390+
deriver.derive_encapsulate()
412391
})
413392
}

0 commit comments

Comments
 (0)