1use crate::util::prelude::*;
2use syn::parse::{ParseStream, Parser};
3
4pub(crate) fn privatize_fn(input: TokenStream) -> TokenStream {
5 transform
6 .parse2(input)
7 .unwrap_or_else(syn::Error::into_compile_error)
8}
9
10fn transform(input: ParseStream<'_>) -> syn::Result<TokenStream> {
11 let outer_attrs = syn::Attribute::parse_outer(input)?;
12 let vis: syn::Visibility = input.parse()?;
13
14 let mut sig: syn::Signature = input.parse()?;
15 privatize_fn_name(&mut sig);
16
17 let rest: TokenStream = input.parse()?;
18
19 Ok(quote::quote! {
20 #(#outer_attrs)* #vis #sig #rest
21 })
22}
23
24pub(crate) fn privatize_fn_name(sig: &mut syn::Signature) {
25 sig.ident = quote::format_ident!("__orig_{}", sig.ident.raw_name());
29}