Skip to content

Commit ef99baf

Browse files
committed
remove lifetime marker
1 parent 076dc2c commit ef99baf

File tree

1 file changed

+63
-80
lines changed
  • crates/rmcp/src/handler/server

1 file changed

+63
-80
lines changed

crates/rmcp/src/handler/server/tool.rs

Lines changed: 63 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,16 @@ pub fn parse_json_object<T: DeserializeOwned>(input: JsonObject) -> Result<T, cr
6363
)
6464
})
6565
}
66-
pub struct ToolCallContext<'service, S> {
66+
pub struct ToolCallContext<S> {
6767
request_context: RequestContext<RoleServer>,
68-
service: &'service S,
68+
service: Arc<S>,
6969
name: Cow<'static, str>,
7070
arguments: Option<JsonObject>,
7171
}
7272

73-
impl<'service, S> ToolCallContext<'service, S> {
73+
impl<S> ToolCallContext<S> {
7474
pub fn new(
75-
service: &'service S,
75+
service: Arc<S>,
7676
CallToolRequestParam { name, arguments }: CallToolRequestParam,
7777
request_context: RequestContext<RoleServer>,
7878
) -> Self {
@@ -91,10 +91,8 @@ impl<'service, S> ToolCallContext<'service, S> {
9191
}
9292
}
9393

94-
pub trait FromToolCallContextPart<'a, S>: Sized {
95-
fn from_tool_call_context_part(
96-
context: ToolCallContext<'a, S>,
97-
) -> Result<(Self, ToolCallContext<'a, S>), crate::Error>;
94+
pub trait FromToolCallContextPart<S>: Sized {
95+
fn from_tool_call_context_part(context: &mut ToolCallContext<S>) -> Result<Self, crate::Error>;
9896
}
9997

10098
pub trait IntoCallToolResult {
@@ -162,12 +160,12 @@ impl IntoCallToolResult for Result<CallToolResult, crate::Error> {
162160
}
163161
}
164162

165-
pub trait CallToolHandler<'a, S, A> {
166-
type Fut: Future<Output = Result<CallToolResult, crate::Error>> + Send + 'a;
167-
fn call(self, context: ToolCallContext<'a, S>) -> Self::Fut;
163+
pub trait CallToolHandler<S, A> {
164+
type Fut: Future<Output = Result<CallToolResult, crate::Error>> + Send;
165+
fn call(self, context: ToolCallContext<S>) -> Self::Fut;
168166
}
169167

170-
pub type DynCallToolHandler<S> = dyn Fn(ToolCallContext<'_, S>) -> BoxFuture<'_, Result<CallToolResult, crate::Error>>
168+
pub type DynCallToolHandler<S> = dyn Fn(ToolCallContext<S>) -> BoxFuture<'static, Result<CallToolResult, crate::Error>>
171169
+ Send
172170
+ Sync;
173171
/// Parameter Extractor
@@ -189,51 +187,32 @@ impl<P: JsonSchema> JsonSchema for Parameters<P> {
189187
}
190188
}
191189

192-
/// Callee Extractor
193-
pub struct Callee<'a, S>(pub &'a S);
194-
195-
impl<'a, S> FromToolCallContextPart<'a, S> for CancellationToken {
196-
fn from_tool_call_context_part(
197-
context: ToolCallContext<'a, S>,
198-
) -> Result<(Self, ToolCallContext<'a, S>), crate::Error> {
199-
Ok((context.request_context.ct.clone(), context))
200-
}
201-
}
202-
203-
impl<'a, S> FromToolCallContextPart<'a, S> for Callee<'a, S> {
190+
impl<S> FromToolCallContextPart<S> for CancellationToken {
204191
fn from_tool_call_context_part(
205-
context: ToolCallContext<'a, S>,
206-
) -> Result<(Self, ToolCallContext<'a, S>), crate::Error> {
207-
Ok((Callee(context.service), context))
192+
context: &mut ToolCallContext<S>,
193+
) -> Result<Self, crate::Error> {
194+
Ok(context.request_context.ct.clone())
208195
}
209196
}
210197

211198
pub struct ToolName(pub Cow<'static, str>);
212199

213-
impl<'a, S> FromToolCallContextPart<'a, S> for ToolName {
200+
impl<S> FromToolCallContextPart<S> for ToolName {
214201
fn from_tool_call_context_part(
215-
context: ToolCallContext<'a, S>,
216-
) -> Result<(Self, ToolCallContext<'a, S>), crate::Error> {
217-
Ok((Self(context.name.clone()), context))
202+
context: &mut ToolCallContext<S>,
203+
) -> Result<Self, crate::Error> {
204+
Ok(Self(context.name.clone()))
218205
}
219206
}
220207

221-
impl<'a, S> FromToolCallContextPart<'a, S> for &'a S {
222-
fn from_tool_call_context_part(
223-
context: ToolCallContext<'a, S>,
224-
) -> Result<(Self, ToolCallContext<'a, S>), crate::Error> {
225-
Ok((context.service, context))
226-
}
227-
}
228-
229-
impl<'a, S, K, V> FromToolCallContextPart<'a, S> for Parameter<K, V>
208+
impl<S, K, V> FromToolCallContextPart<S> for Parameter<K, V>
230209
where
231210
K: ConstString,
232211
V: DeserializeOwned,
233212
{
234213
fn from_tool_call_context_part(
235-
context: ToolCallContext<'a, S>,
236-
) -> Result<(Self, ToolCallContext<'a, S>), crate::Error> {
214+
context: &mut ToolCallContext<S>,
215+
) -> Result<Self, crate::Error> {
237216
let arguments = context
238217
.arguments
239218
.as_ref()
@@ -255,17 +234,17 @@ where
255234
None,
256235
)
257236
})?;
258-
Ok((Parameter(K::default(), value), context))
237+
Ok(Parameter(K::default(), value))
259238
}
260239
}
261240

262-
impl<'a, S, P> FromToolCallContextPart<'a, S> for Parameters<P>
241+
impl<S, P> FromToolCallContextPart<S> for Parameters<P>
263242
where
264243
P: DeserializeOwned,
265244
{
266245
fn from_tool_call_context_part(
267-
mut context: ToolCallContext<'a, S>,
268-
) -> Result<(Self, ToolCallContext<'a, S>), crate::Error> {
246+
context: &mut ToolCallContext<S>,
247+
) -> Result<Self, crate::Error> {
269248
let arguments = context.arguments.take().unwrap_or_default();
270249
let value: P =
271250
serde_json::from_value(serde_json::Value::Object(arguments)).map_err(|e| {
@@ -274,37 +253,37 @@ where
274253
None,
275254
)
276255
})?;
277-
Ok((Parameters(value), context))
256+
Ok(Parameters(value))
278257
}
279258
}
280259

281-
impl<'a, S> FromToolCallContextPart<'a, S> for JsonObject {
260+
impl<S> FromToolCallContextPart<S> for JsonObject {
282261
fn from_tool_call_context_part(
283-
mut context: ToolCallContext<'a, S>,
284-
) -> Result<(Self, ToolCallContext<'a, S>), crate::Error> {
262+
context: &mut ToolCallContext<S>,
263+
) -> Result<Self, crate::Error> {
285264
let object = context.arguments.take().unwrap_or_default();
286-
Ok((object, context))
265+
Ok(object)
287266
}
288267
}
289268

290-
impl<'a, S> FromToolCallContextPart<'a, S> for crate::model::Extensions {
269+
impl<S> FromToolCallContextPart<S> for crate::model::Extensions {
291270
fn from_tool_call_context_part(
292-
context: ToolCallContext<'a, S>,
293-
) -> Result<(Self, ToolCallContext<'a, S>), crate::Error> {
271+
context: &mut ToolCallContext<S>,
272+
) -> Result<Self, crate::Error> {
294273
let extensions = context.request_context.extensions.clone();
295-
Ok((extensions, context))
274+
Ok(extensions)
296275
}
297276
}
298277

299278
pub struct Extension<T>(pub T);
300279

301-
impl<'a, S, T> FromToolCallContextPart<'a, S> for Extension<T>
280+
impl<S, T> FromToolCallContextPart<S> for Extension<T>
302281
where
303282
T: Send + Sync + 'static + Clone,
304283
{
305284
fn from_tool_call_context_part(
306-
context: ToolCallContext<'a, S>,
307-
) -> Result<(Self, ToolCallContext<'a, S>), crate::Error> {
285+
context: &mut ToolCallContext<S>,
286+
) -> Result<Self, crate::Error> {
308287
let extension = context
309288
.request_context
310289
.extensions
@@ -316,14 +295,14 @@ where
316295
None,
317296
)
318297
})?;
319-
Ok((Extension(extension), context))
298+
Ok(Extension(extension))
320299
}
321300
}
322301

323-
impl<'s, S> ToolCallContext<'s, S> {
302+
impl< S> ToolCallContext<S> {
324303
pub fn invoke<H, A>(self, h: H) -> H::Fut
325304
where
326-
H: CallToolHandler<'s, S, A>,
305+
H: CallToolHandler<S, A>,
327306
{
328307
h.call(self)
329308
}
@@ -333,6 +312,10 @@ impl<'s, S> ToolCallContext<'s, S> {
333312
pub struct AsyncAdapter<P, Fut, R>(PhantomData<(fn(P) -> Fut, fn(Fut) -> R)>);
334313
pub struct SyncAdapter<P, R>(PhantomData<fn(P) -> R>);
335314

315+
#[allow(clippy::type_complexity)]
316+
pub struct AsyncMethodAdapter<P, Fut, R>(PhantomData<(fn(P) -> Fut, fn(Fut) -> R)>);
317+
pub struct SyncMethodAdapter<P, R>(PhantomData<fn(P) -> R>);
318+
336319
macro_rules! impl_for {
337320
($($T: ident)*) => {
338321
impl_for!([] [$($T)*]);
@@ -346,26 +329,26 @@ macro_rules! impl_for {
346329
impl_for!([$($Tn)* $Tn_1] [$($Rest)*]);
347330
};
348331
(@impl $($Tn: ident)*) => {
349-
impl<'s, $($Tn,)* S, F, Fut, R> CallToolHandler<'s, S, AsyncAdapter<($($Tn,)*), Fut, R>> for F
332+
impl<$($Tn,)* S, F, Fut, R> CallToolHandler<S, AsyncAdapter<($($Tn,)*), Fut, R>> for F
350333
where
351334
$(
352-
$Tn: FromToolCallContextPart<'s, S> + 's,
335+
$Tn: FromToolCallContextPart<S> ,
353336
)*
354-
F: FnOnce($($Tn,)*) -> Fut + Send + 's,
355-
Fut: Future<Output = R> + Send + 's,
356-
R: IntoCallToolResult + Send + 's,
337+
F: FnOnce($($Tn,)*) -> Fut + Send + ,
338+
Fut: Future<Output = R> + Send + ,
339+
R: IntoCallToolResult + Send + ,
357340
S: Send + Sync,
358341
{
359342
type Fut = IntoCallToolResultFut<Fut, R>;
360343
#[allow(unused_variables, non_snake_case)]
361344
fn call(
362345
self,
363-
context: ToolCallContext<'s, S>,
346+
mut context: ToolCallContext<S>,
364347
) -> Self::Fut {
365348
$(
366-
let result = $Tn::from_tool_call_context_part(context);
367-
let ($Tn, context) = match result {
368-
Ok((value, context)) => (value, context),
349+
let result = $Tn::from_tool_call_context_part(&mut context);
350+
let $Tn = match result {
351+
Ok(value) => value,
369352
Err(e) => return IntoCallToolResultFut::Ready {
370353
result: std::future::ready(Err(e)),
371354
},
@@ -378,25 +361,25 @@ macro_rules! impl_for {
378361
}
379362
}
380363

381-
impl<'s, $($Tn,)* S, F, R> CallToolHandler<'s, S, SyncAdapter<($($Tn,)*), R>> for F
364+
impl<$($Tn,)* S, F, R> CallToolHandler<S, SyncAdapter<($($Tn,)*), R>> for F
382365
where
383366
$(
384-
$Tn: FromToolCallContextPart<'s, S> + 's,
367+
$Tn: FromToolCallContextPart<S> + ,
385368
)*
386-
F: FnOnce($($Tn,)*) -> R + Send + 's,
387-
R: IntoCallToolResult + Send + 's,
369+
F: FnOnce($($Tn,)*) -> R + Send + ,
370+
R: IntoCallToolResult + Send + ,
388371
S: Send + Sync,
389372
{
390373
type Fut = Ready<Result<CallToolResult, crate::Error>>;
391374
#[allow(unused_variables, non_snake_case)]
392375
fn call(
393376
self,
394-
context: ToolCallContext<'s, S>,
377+
mut context: ToolCallContext<S>,
395378
) -> Self::Fut {
396379
$(
397-
let result = $Tn::from_tool_call_context_part(context);
398-
let ($Tn, context) = match result {
399-
Ok((value, context)) => (value, context),
380+
let result = $Tn::from_tool_call_context_part(&mut context);
381+
let $Tn = match result {
382+
Ok(value) => value,
400383
Err(e) => return std::future::ready(Err(e)),
401384
};
402385
)*
@@ -415,7 +398,7 @@ pub struct ToolBoxItem<S> {
415398
impl<S: Send + Sync + 'static + Clone> ToolBoxItem<S> {
416399
pub fn new<C>(attr: crate::model::Tool, call: C) -> Self
417400
where
418-
C: Fn(ToolCallContext<'_, S>) -> BoxFuture<'_, Result<CallToolResult, crate::Error>>
401+
C: Fn(ToolCallContext<S>) -> BoxFuture<'static, Result<CallToolResult, crate::Error>>
419402
+ Send
420403
+ Sync
421404
+ 'static,
@@ -452,7 +435,7 @@ impl<S> ToolBox<S> {
452435

453436
pub async fn call(
454437
&self,
455-
context: ToolCallContext<'_, S>,
438+
context: ToolCallContext<S>,
456439
) -> Result<CallToolResult, crate::Error> {
457440
let item = self
458441
.map

0 commit comments

Comments
 (0)