diff --git a/resources/fixture/async_fixture.rs b/resources/fixture/async_fixture.rs index b1ee3aa..5d282b5 100644 --- a/resources/fixture/async_fixture.rs +++ b/resources/fixture/async_fixture.rs @@ -8,6 +8,11 @@ async fn async_u32() -> u32 { 42 } +#[fixture] +async fn nest_fixture(async_u32: impl Future) -> u32 { + async_u32.await +} + #[rstest] async fn default_is_async() { assert_eq!(42, async_u32::default().await); diff --git a/src/render/fixture.rs b/src/render/fixture.rs index 094684f..fd7be55 100644 --- a/src/render/fixture.rs +++ b/src/render/fixture.rs @@ -87,6 +87,7 @@ fn render_partial_impl( let generics = generics_clean_up(&fixture.sig.generics, fn_args(fixture).take(n), &output); let where_clause = &generics.where_clause; + let asyncness = &fixture.sig.asyncness; let inject = resolve_args(fn_args_idents(fixture).skip(n), resolver); @@ -94,11 +95,21 @@ fn render_partial_impl( let fixture_args = fn_args_idents(fixture); let name = Ident::new(&format!("partial_{}", n), Span::call_site()); + let self_get = if asyncness.is_none() { + quote! { + Self::get(#(#fixture_args),*) + } + } else { + quote! { + Self::get(#(#fixture_args),*).await + } + }; + quote! { #[allow(unused_mut)] - pub fn #name #generics (#(#sign_args),*) #output #where_clause { + pub #asyncness fn #name #generics (#(#sign_args),*) #output #where_clause { #inject - Self::get(#(#fixture_args),*) + #self_get } } }