pub fn function<Input: AnyTokenStream, Dummy: AnyTokenStream, Output: MacroOutput, Return: AnyTokenStream, Function>(
input: impl AnyTokenStream,
input_as_dummy: bool,
body: impl FunctionMacroHandler<Function, Input = Input, Dummy = Dummy, Output = Output>,
) -> ReturnExpand description
Handles function like proc_macro
implementation
Use function! to support Parse and ToTokens as well.
Takes any TokenStream for input and returns any
TokenStream. If input_as_dummy = true the item input will be used as
default dummy code on error. body takes a FunctionMacroHandler with
one TokenStream parameter. And an optional &mut Emitter and a
&mut TokenStream for storing a dummy output.
use manyhow::{function, Emitter, Result};
use proc_macro2::TokenStream;
function(
input,
false,
|input: TokenStream, dummy: &mut TokenStream, emitter: &mut Emitter| -> Result {
// ..
},
);Note: When input_as_dummy = true the dummy: &mut TokenStream will be
initialized with input. To override assign a new TokenStream:
use manyhow::{function, Result, SilentError};
use proc_macro2::TokenStream;
use quote::{quote, ToTokens};
let input = quote!(some input);
let output: TokenStream = function(
input,
true,
|input: TokenStream,
dummy: &mut TokenStream|
-> Result<TokenStream, SilentError> {
assert_tokens!(dummy.to_token_stream(), {
some input
});
*dummy = quote! {
another input
};
// ..
Err(SilentError)
},
);
assert_tokens! {output, {another input}};