|  | 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<Attribute>, | 
|  | pub vis: Visibility, | 
|  | pub defaultness: Option<Token![default]>, | 
|  | pub sig: Signature, | 
|  | pub semi_token: Token![;], | 
|  | } | 
|  |  | 
|  | impl Parse for VerbatimFn { | 
|  | fn parse(input: ParseStream) -> Result<Self> { | 
|  | 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); | 
|  | } | 
|  | } |