use proc_macro2::TokenStream; use quote::{ToTokens, TokenStreamExt}; use syn::parse::{Parse, ParseStream, Result}; use syn::{Attribute, Signature, Token, Visibility}; pub struct VerbatimFn { pub attrs: Vec, pub vis: Visibility, pub defaultness: Option, pub sig: Signature, pub semi_token: Token![;], } impl Parse for VerbatimFn { fn parse(input: ParseStream) -> Result { Ok(VerbatimFn { attrs: input.call(Attribute::parse_outer)?, vis: input.parse()?, defaultness: input.parse()?, sig: input.parse()?, semi_token: input.parse()?, }) } } impl ToTokens for VerbatimFn { fn to_tokens(&self, tokens: &mut TokenStream) { tokens.append_all(&self.attrs); self.vis.to_tokens(tokens); self.defaultness.to_tokens(tokens); self.sig.to_tokens(tokens); self.semi_token.to_tokens(tokens); } }