Skip to content

Commit d862743

Browse files
authored
fix(macros): respect visibility of input function (#14)
1 parent 84883ca commit d862743

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

macros/src/dynify.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,12 @@ fn expand_trait(rename: Option<Ident>, mut dyn_trait: syn::ItemTrait) -> Result<
9898
}
9999

100100
fn expand_fn(rename: Option<Ident>, mut dyn_fn: syn::ItemFn) -> Result<TokenStream> {
101-
let syn::ItemFn { sig, attrs, .. } = &mut dyn_fn;
101+
let syn::ItemFn {
102+
vis,
103+
sig,
104+
attrs,
105+
block: _,
106+
} = &mut dyn_fn;
102107

103108
let dyn_fn_name = rename.unwrap_or_else(|| format_ident!("dyn_{}", sig.ident));
104109
let input_fn_name = std::mem::replace(&mut sig.ident, dyn_fn_name);
@@ -107,7 +112,7 @@ fn expand_fn(rename: Option<Ident>, mut dyn_fn: syn::ItemFn) -> Result<TokenStre
107112
let attrs_outer = attrs.outer();
108113
let attrs_inner = attrs.inner();
109114
let impl_body = quote_transformed_body(transformed, &input_fn_name, sig);
110-
Ok(quote!(#(#attrs_outer)* #sig { #(#attrs_inner)* #impl_body }))
115+
Ok(quote!(#(#attrs_outer)* #vis #sig { #(#attrs_inner)* #impl_body }))
111116
}
112117

113118
/// Generates implementation body for a transformed function.

macros/src/dynify_tests.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ define_macro_tests!(
8080
quote!(trait Trait { async fn test(&self); }),
8181
)]
8282
// == Functions == //
83+
#[case::fn_with_vis(
84+
quote!(),
85+
quote!(pub(crate) fn test() -> impl core::any::Any { todo!() }),
86+
)]
8387
#[case::fn_returning_impl(
8488
quote!(),
8589
quote!(fn test() -> impl core::any::Any { todo!() }),
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/* This file is @generated for testing purpose */
2+
#[allow(async_fn_in_trait)]
3+
pub(crate) fn test() -> impl core::any::Any {
4+
todo!()
5+
}
6+
pub(crate) fn dyn_test<'dynify>() -> ::dynify::r#priv::Fn<
7+
(),
8+
dyn 'dynify + core::any::Any,
9+
> {
10+
::dynify::__from_fn!([] test,)
11+
}
12+
fn main() {}

0 commit comments

Comments
 (0)