1 use proc_macro2::TokenStream;
2 use quote::{ToTokens, TokenStreamExt};
3 use syn::parse::{Parse, ParseStream, Result};
4 use syn::{Attribute, Signature, Token, Visibility};
5 
6 pub struct VerbatimFn {
7     pub attrs: Vec<Attribute>,
8     pub vis: Visibility,
9     pub defaultness: Option<Token![default]>,
10     pub sig: Signature,
11     pub semi_token: Token![;],
12 }
13 
14 impl Parse for VerbatimFn {
parse(input: ParseStream) -> Result<Self>15     fn parse(input: ParseStream) -> Result<Self> {
16         Ok(VerbatimFn {
17             attrs: input.call(Attribute::parse_outer)?,
18             vis: input.parse()?,
19             defaultness: input.parse()?,
20             sig: input.parse()?,
21             semi_token: input.parse()?,
22         })
23     }
24 }
25 
26 impl ToTokens for VerbatimFn {
to_tokens(&self, tokens: &mut TokenStream)27     fn to_tokens(&self, tokens: &mut TokenStream) {
28         tokens.append_all(&self.attrs);
29         self.vis.to_tokens(tokens);
30         self.defaultness.to_tokens(tokens);
31         self.sig.to_tokens(tokens);
32         self.semi_token.to_tokens(tokens);
33     }
34 }
35