pub struct RunningService<R, S>where
R: ServiceRole,
S: Service<R>,{ /* private fields */ }mcp and crate feature tools and (crate features client or server) only.Implementations§
Source§impl<S> RunningService<RoleClient, S>where
S: Service<RoleClient>,
impl<S> RunningService<RoleClient, S>where
S: Service<RoleClient>,
Sourcepub async fn call_tool_once(
&self,
params: CallToolRequestParams,
) -> Result<CallToolResponse, ServiceError>
pub async fn call_tool_once( &self, params: CallToolRequestParams, ) -> Result<CallToolResponse, ServiceError>
Send one tools/call request without driving MRTR follow-up rounds.
Sourcepub async fn get_prompt_once(
&self,
params: GetPromptRequestParams,
) -> Result<GetPromptResponse, ServiceError>
pub async fn get_prompt_once( &self, params: GetPromptRequestParams, ) -> Result<GetPromptResponse, ServiceError>
Send one prompts/get request without driving MRTR follow-up rounds.
Sourcepub async fn read_resource_once(
&self,
params: ReadResourceRequestParams,
) -> Result<ReadResourceResponse, ServiceError>
pub async fn read_resource_once( &self, params: ReadResourceRequestParams, ) -> Result<ReadResourceResponse, ServiceError>
Send one resources/read request without driving MRTR follow-up rounds.
Sourcepub async fn call_tool(
&self,
params: CallToolRequestParams,
) -> Result<CallToolResult, ServiceError>
pub async fn call_tool( &self, params: CallToolRequestParams, ) -> Result<CallToolResult, ServiceError>
High-level tools/call helper that automatically fulfils SEP-2322
input_required rounds through the local ClientHandler service.
§Errors
Returns ServiceError::InputRequiredRoundsExceeded if the peer does
not produce a final CallToolResult within the default MRTR round cap.
Other transport, protocol, and local input-handler errors are propagated.
Sourcepub async fn call_tool_with_mrtr_max_rounds(
&self,
params: CallToolRequestParams,
max_rounds: usize,
) -> Result<CallToolResult, ServiceError>
pub async fn call_tool_with_mrtr_max_rounds( &self, params: CallToolRequestParams, max_rounds: usize, ) -> Result<CallToolResult, ServiceError>
Same as Self::call_tool, with an explicit MRTR round cap.
§Errors
Returns ServiceError::InputRequiredRoundsExceeded once max_rounds
input_required responses have been driven without receiving a final
CallToolResult. Other transport, protocol, and local input-handler
errors are propagated.
Sourcepub async fn get_prompt(
&self,
params: GetPromptRequestParams,
) -> Result<GetPromptResult, ServiceError>
pub async fn get_prompt( &self, params: GetPromptRequestParams, ) -> Result<GetPromptResult, ServiceError>
High-level prompts/get helper that automatically fulfils SEP-2322
input_required rounds through the local ClientHandler service.
§Errors
Returns ServiceError::InputRequiredRoundsExceeded if the peer does
not produce a final GetPromptResult within the default MRTR round cap.
Other transport, protocol, and local input-handler errors are propagated.
Sourcepub async fn get_prompt_with_mrtr_max_rounds(
&self,
params: GetPromptRequestParams,
max_rounds: usize,
) -> Result<GetPromptResult, ServiceError>
pub async fn get_prompt_with_mrtr_max_rounds( &self, params: GetPromptRequestParams, max_rounds: usize, ) -> Result<GetPromptResult, ServiceError>
Same as Self::get_prompt, with an explicit MRTR round cap.
§Errors
Returns ServiceError::InputRequiredRoundsExceeded once max_rounds
input_required responses have been driven without receiving a final
GetPromptResult. Other transport, protocol, and local input-handler
errors are propagated.
Sourcepub async fn read_resource(
&self,
params: ReadResourceRequestParams,
) -> Result<ReadResourceResult, ServiceError>
pub async fn read_resource( &self, params: ReadResourceRequestParams, ) -> Result<ReadResourceResult, ServiceError>
High-level resources/read helper that automatically fulfils SEP-2322
input_required rounds through the local ClientHandler service.
§Errors
Returns ServiceError::InputRequiredRoundsExceeded if the peer does
not produce a final ReadResourceResult within the default MRTR round
cap. Other transport, protocol, and local input-handler errors are
propagated.
Sourcepub async fn read_resource_with_mrtr_max_rounds(
&self,
params: ReadResourceRequestParams,
max_rounds: usize,
) -> Result<ReadResourceResult, ServiceError>
pub async fn read_resource_with_mrtr_max_rounds( &self, params: ReadResourceRequestParams, max_rounds: usize, ) -> Result<ReadResourceResult, ServiceError>
Same as Self::read_resource, with an explicit MRTR round cap.
§Errors
Returns ServiceError::InputRequiredRoundsExceeded once max_rounds
input_required responses have been driven without receiving a final
ReadResourceResult. Other transport, protocol, and local input-handler
errors are propagated.
Source§impl<R, S> RunningService<R, S>where
R: ServiceRole,
S: Service<R>,
impl<R, S> RunningService<R, S>where
R: ServiceRole,
S: Service<R>,
pub fn peer(&self) -> &Peer<R>
pub fn service(&self) -> &S
pub fn cancellation_token(&self) -> RunningServiceCancellationToken
Sourcepub async fn waiting(self) -> Result<QuitReason, JoinError>
pub async fn waiting(self) -> Result<QuitReason, JoinError>
Wait for the service to complete.
This will block until the service loop terminates (either due to cancellation, transport closure, or an error).
Sourcepub async fn close(&mut self) -> Result<QuitReason, JoinError>
pub async fn close(&mut self) -> Result<QuitReason, JoinError>
Gracefully close the connection and wait for cleanup to complete.
This method cancels the service, waits for the background task to finish
(which includes calling transport.close()), and ensures all cleanup
operations complete before returning.
Unlike cancel, this method takes &mut self and can be
called without consuming the RunningService. After calling this method,
the service is considered closed and subsequent operations will fail.
§Example
let mut client = ().serve(transport).await?;
// ... use the client ...
client.close().await?;Sourcepub async fn close_with_timeout(
&mut self,
timeout: Duration,
) -> Result<Option<QuitReason>, JoinError>
pub async fn close_with_timeout( &mut self, timeout: Duration, ) -> Result<Option<QuitReason>, JoinError>
Gracefully close the connection with a timeout.
Similar to close, but returns after the specified timeout
if the cleanup doesn’t complete in time. This is useful for ensuring
a bounded shutdown time.
Returns Ok(Some(reason)) if shutdown completed within the timeout,
Ok(None) if the timeout was reached, or Err if there was a join error.
Methods from Deref<Target = Peer<R>>§
pub async fn send_notification( &self, notification: <R as ServiceRole>::Not, ) -> Result<(), ServiceError>
pub async fn send_request( &self, request: <R as ServiceRole>::Req, ) -> Result<<R as ServiceRole>::PeerResp, ServiceError>
pub async fn send_cancellable_request( &self, request: <R as ServiceRole>::Req, options: PeerRequestOptions, ) -> Result<RequestHandle<R>, ServiceError>
pub async fn send_request_with_option( &self, request: <R as ServiceRole>::Req, options: PeerRequestOptions, ) -> Result<RequestHandle<R>, ServiceError>
Sourcepub fn peer_info(&self) -> Option<Arc<<R as ServiceRole>::PeerInfo>>
pub fn peer_info(&self) -> Option<Arc<<R as ServiceRole>::PeerInfo>>
Snapshot of the peer’s handshake info.
Sourcepub fn set_peer_info(&self, info: <R as ServiceRole>::PeerInfo)
pub fn set_peer_info(&self, info: <R as ServiceRole>::PeerInfo)
Stores the peer’s handshake info, overwriting any previous value.
pub fn is_transport_closed(&self) -> bool
Trait Implementations§
Source§impl<R, S> Debug for RunningService<R, S>
impl<R, S> Debug for RunningService<R, S>
Source§impl<R, S> Deref for RunningService<R, S>where
R: ServiceRole,
S: Service<R>,
impl<R, S> Deref for RunningService<R, S>where
R: ServiceRole,
S: Service<R>,
Source§impl<R, S> Drop for RunningService<R, S>where
R: ServiceRole,
S: Service<R>,
impl<R, S> Drop for RunningService<R, S>where
R: ServiceRole,
S: Service<R>,
Auto Trait Implementations§
impl<R, S> !RefUnwindSafe for RunningService<R, S>
impl<R, S> !UnwindSafe for RunningService<R, S>
impl<R, S> Freeze for RunningService<R, S>
impl<R, S> Send for RunningService<R, S>
impl<R, S> Sync for RunningService<R, S>
impl<R, S> Unpin for RunningService<R, S>
impl<R, S> UnsafeUnpin for RunningService<R, S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreimpl<T> MaybeSend for Twhere
T: Send,
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.