Skip to main content

DefaultRequestHandler

Struct DefaultRequestHandler 

Source
pub struct DefaultRequestHandler { /* private fields */ }
Expand description

Default implementation of RequestHandler that orchestrates task lifecycle management, storage, and executor dispatch.

Implementations§

Source§

impl DefaultRequestHandler

Source

pub fn new(executor: impl AgentExecutor, task_store: impl TaskStore) -> Self

Source

pub fn with_extended_agent_card(self, card: AgentCard) -> Self

Serve card as the extended Agent Card, identically for every caller.

Also declares the extendedAgentCard capability, since serving one and advertising it should not be two separate things to remember — an explicit with_capabilities(..) still overrides it either way.

Source

pub fn with_extended_agent_card_resolver( self, resolver: impl ExtendedAgentCardResolver + 'static, ) -> Self

Serve an extended Agent Card computed per caller, so an agent can reveal different skills to different principals (§12.4).

Source

pub fn with_authorizer( self, authorizer: impl RequestAuthorizer + 'static, ) -> Self

Install an authorizer. The default handler does not enforce one.

Source

pub fn with_push_config_store( self, push_config_store: impl PushConfigStore, ) -> Self

Source

pub fn with_push_notifications( self, push_config_store: impl PushConfigStore, push_sender: HttpPushSender, ) -> Self

Source

pub fn with_capabilities(self, capabilities: AgentCapabilities) -> Self

Source

pub fn with_default_input_modes(self, modes: impl Into<Vec<String>>) -> Self

Declares the media types incoming message parts may use (§5.1’s defaultInputModes). Empty (the default) means unrestricted, so embedders that never call this see no change in behavior.

Trait Implementations§

Source§

impl RequestHandler for DefaultRequestHandler

Source§

fn list_tasks<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, req: ListTasksRequest, ) -> Pin<Box<dyn Future<Output = Result<ListTasksResponse, A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Bounds the page twice, and neither is redundant: TaskStore is a public trait.

Clamping page_size before the call bounds a store that honours it – the ordinary case, and the one that turns pageSize=999999999 into a real query. Truncating the response bounds a store that ignores it, which cannot be detected from here.

On truncation the store’s next_page_token is left alone: paging is the store’s own scheme (the in-tree stores use offsets, another may use an opaque cursor) so no correct token can be synthesised. See [TaskStore::list].

Source§

fn send_message<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, req: SendMessageRequest, ) -> Pin<Box<dyn Future<Output = Result<SendMessageResponse, A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn send_streaming_message<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, req: SendMessageRequest, ) -> Pin<Box<dyn Future<Output = Result<BoxStream<'static, Result<StreamResponse, A2AError>>, A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn get_task<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, req: GetTaskRequest, ) -> Pin<Box<dyn Future<Output = Result<Task, A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn cancel_task<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, req: CancelTaskRequest, ) -> Pin<Box<dyn Future<Output = Result<Task, A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn subscribe_to_task<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, req: SubscribeToTaskRequest, ) -> Pin<Box<dyn Future<Output = Result<BoxStream<'static, Result<StreamResponse, A2AError>>, A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn create_push_config<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, req: TaskPushNotificationConfig, ) -> Pin<Box<dyn Future<Output = Result<TaskPushNotificationConfig, A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn get_push_config<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, req: GetTaskPushNotificationConfigRequest, ) -> Pin<Box<dyn Future<Output = Result<TaskPushNotificationConfig, A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn list_push_configs<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, req: ListTaskPushNotificationConfigsRequest, ) -> Pin<Box<dyn Future<Output = Result<ListTaskPushNotificationConfigsResponse, A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn delete_push_config<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, req: DeleteTaskPushNotificationConfigRequest, ) -> Pin<Box<dyn Future<Output = Result<(), A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn get_extended_agent_card<'life0, 'life1, 'async_trait>( &'life0 self, params: &'life1 ServiceParams, _req: GetExtendedAgentCardRequest, ) -> Pin<Box<dyn Future<Output = Result<AgentCard, A2AError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more