From 1f3486427f596981d85fb2f0cfe6b90db75e6a8b Mon Sep 17 00:00:00 2001 From: Sean Lynch <42618346+swlynch99@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:51:27 -0700 Subject: [PATCH] fix(macros): Allow macros to work even if Future is not in scope `#[tool]` generates code that uses Future by name for async functions. This means that consumers have to import Future. This commit fixes that by changing the macro expansion to use std::future::Future instead. The same applies to `#[prompt]` as well. --- crates/rmcp-macros/src/prompt.rs | 4 ++-- crates/rmcp-macros/src/tool.rs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/rmcp-macros/src/prompt.rs b/crates/rmcp-macros/src/prompt.rs index 68f853ab..128e48eb 100644 --- a/crates/rmcp-macros/src/prompt.rs +++ b/crates/rmcp-macros/src/prompt.rs @@ -108,10 +108,10 @@ pub fn prompt(attr: TokenStream, input: TokenStream) -> syn::Result } match &fn_item.sig.output { syn::ReturnType::Default => { - quote! { -> futures::future::BoxFuture<#lt, ()> } + quote! { -> ::std::pin::Pin + Send + #lt>> } } syn::ReturnType::Type(_, ty) => { - quote! { -> futures::future::BoxFuture<#lt, #ty> } + quote! { -> ::std::pin::Pin + Send + #lt>> } } } })?; diff --git a/crates/rmcp-macros/src/tool.rs b/crates/rmcp-macros/src/tool.rs index 925c0df2..d6662f07 100644 --- a/crates/rmcp-macros/src/tool.rs +++ b/crates/rmcp-macros/src/tool.rs @@ -234,7 +234,7 @@ pub fn tool(attr: TokenStream, input: TokenStream) -> syn::Result { // modify the the input function if fn_item.sig.asyncness.is_some() { // 1. remove asyncness from sig - // 2. make return type: `std::pin::Pin + Send + '_>>` + // 2. make return type: `std::pin::Pin + Send + '_>>` // 3. make body: { Box::pin(async move { #body }) } let new_output = syn::parse2::({ let mut lt = quote! { 'static }; @@ -249,10 +249,10 @@ pub fn tool(attr: TokenStream, input: TokenStream) -> syn::Result { } match &fn_item.sig.output { syn::ReturnType::Default => { - quote! { -> futures::future::BoxFuture<#lt, ()> } + quote! { -> ::std::pin::Pin + Send + #lt>> } } syn::ReturnType::Type(_, ty) => { - quote! { -> futures::future::BoxFuture<#lt, #ty> } + quote! { -> ::std::pin::Pin + Send + #lt>> } } } })?;