From a09ec898f981ad84c7dbb501bd374f10dd5e0f24 Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Sun, 24 Sep 2023 12:29:26 -0700 Subject: [PATCH] spiff the proc macro for user reflection in templates --- optional_optional_user/src/lib.rs | 14 ++++++++++++-- src/lib.rs | 4 ++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/optional_optional_user/src/lib.rs b/optional_optional_user/src/lib.rs index 40e0ceb..c6e84b4 100644 --- a/optional_optional_user/src/lib.rs +++ b/optional_optional_user/src/lib.rs @@ -19,7 +19,7 @@ pub fn derive_optional_optional_user(input: TokenStream) -> TokenStream { }) .is_some(); - let (use_any, user_is_option_user) = if has_user { + let (use_any, user_is_option_user, user_is_mandatory) = if has_user { ( quote!( use ::std::any::Any; @@ -28,9 +28,10 @@ pub fn derive_optional_optional_user(input: TokenStream) -> TokenStream { ::std::any::TypeId::of::<::std::option::Option>() == self.user.type_id() ), + quote!(::std::any::TypeId::of::() == self.user.type_id()), ) } else { - (quote!(), quote!(false)) + (quote!(), quote!(false), quote!(false)) }; let output = quote!( @@ -39,6 +40,15 @@ pub fn derive_optional_optional_user(input: TokenStream) -> TokenStream { #use_any #user_is_option_user } + pub fn has_mandatory_user(&self) -> bool { + #use_any + #user_is_mandatory + } + + pub fn has_user(&self) -> bool { + self.has_optional_user() || self.has_mandatory_user() + } + } ); diff --git a/src/lib.rs b/src/lib.rs index 55f54a9..8e563dc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -97,6 +97,7 @@ mod test { #[test] fn main_page_has_optional_user() { assert!(MainPage::default().has_optional_user()); + assert!(MainPage::default().has_user()); } #[test] @@ -111,6 +112,8 @@ mod test { user: User, } assert!(!TestThing::default().has_optional_user()); + assert!(TestThing::default().has_mandatory_user()); + assert!(TestThing::default().has_user()); } #[test] @@ -120,5 +123,6 @@ mod test { user: Option, } assert!(!TestThing::default().has_optional_user()); + assert!(!TestThing::default().has_user()); } }