use crate::*;
pub(crate) fn referer_macro(
attr: TokenStream,
item: TokenStream,
position: Position,
) -> TokenStream {
let multi_referer: MultiRefererData = parse_macro_input!(attr as MultiRefererData);
inject(position, item, |context: &Ident, _: &Ident| {
let statements = multi_referer.referer_values.iter().map(|referer_value| {
quote! {
if #context.get_request().try_get_header_back(::hyperlane::REFERER).map_or(true, |referer_header| referer_header != #referer_value) {
return ::hyperlane::Status::Continue;
}
}
});
quote! {
#(#statements)*
}
})
}
pub(crate) fn reject_referer_macro(
attr: TokenStream,
item: TokenStream,
position: Position,
) -> TokenStream {
let multi_referer: MultiRefererData = parse_macro_input!(attr as MultiRefererData);
inject(position, item, |context: &Ident, _: &Ident| {
let statements = multi_referer.referer_values.iter().map(|referer_value| {
quote! {
if #context.get_request().try_get_header_back(::hyperlane::REFERER).map_or(false, |referer_header| referer_header == #referer_value) {
return ::hyperlane::Status::Continue;
}
}
});
quote! {
#(#statements)*
}
})
}