spiff the proc macro for user reflection in templates
This commit is contained in:
parent
cc7afb3533
commit
a09ec898f9
2 changed files with 16 additions and 2 deletions
|
@ -19,7 +19,7 @@ pub fn derive_optional_optional_user(input: TokenStream) -> TokenStream {
|
||||||
})
|
})
|
||||||
.is_some();
|
.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!(
|
quote!(
|
||||||
use ::std::any::Any;
|
use ::std::any::Any;
|
||||||
|
@ -28,9 +28,10 @@ pub fn derive_optional_optional_user(input: TokenStream) -> TokenStream {
|
||||||
::std::any::TypeId::of::<::std::option::Option<crate::User>>()
|
::std::any::TypeId::of::<::std::option::Option<crate::User>>()
|
||||||
== self.user.type_id()
|
== self.user.type_id()
|
||||||
),
|
),
|
||||||
|
quote!(::std::any::TypeId::of::<crate::User>() == self.user.type_id()),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
(quote!(), quote!(false))
|
(quote!(), quote!(false), quote!(false))
|
||||||
};
|
};
|
||||||
|
|
||||||
let output = quote!(
|
let output = quote!(
|
||||||
|
@ -39,6 +40,15 @@ pub fn derive_optional_optional_user(input: TokenStream) -> TokenStream {
|
||||||
#use_any
|
#use_any
|
||||||
#user_is_option_user
|
#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()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,7 @@ mod test {
|
||||||
#[test]
|
#[test]
|
||||||
fn main_page_has_optional_user() {
|
fn main_page_has_optional_user() {
|
||||||
assert!(MainPage::default().has_optional_user());
|
assert!(MainPage::default().has_optional_user());
|
||||||
|
assert!(MainPage::default().has_user());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -111,6 +112,8 @@ mod test {
|
||||||
user: User,
|
user: User,
|
||||||
}
|
}
|
||||||
assert!(!TestThing::default().has_optional_user());
|
assert!(!TestThing::default().has_optional_user());
|
||||||
|
assert!(TestThing::default().has_mandatory_user());
|
||||||
|
assert!(TestThing::default().has_user());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -120,5 +123,6 @@ mod test {
|
||||||
user: Option<bool>,
|
user: Option<bool>,
|
||||||
}
|
}
|
||||||
assert!(!TestThing::default().has_optional_user());
|
assert!(!TestThing::default().has_optional_user());
|
||||||
|
assert!(!TestThing::default().has_user());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue