#[non_exhaustive]pub struct A2aError {
pub code: ErrorCode,
pub message: String,
pub data: Option<Value>,
}Expand description
The canonical error type for A2A protocol operations.
Carries an ErrorCode, a human-readable message, and an optional
data payload (arbitrary JSON) for additional diagnostics.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.code: ErrorCodeMachine-readable error code.
message: StringHuman-readable error message.
data: Option<Value>Optional structured error details.
Implementations§
Source§impl A2aError
impl A2aError
Sourcepub fn new(code: ErrorCode, message: impl Into<String>) -> A2aError
pub fn new(code: ErrorCode, message: impl Into<String>) -> A2aError
Creates a new A2aError with the given code and message.
Sourcepub fn with_data(
code: ErrorCode,
message: impl Into<String>,
data: Value,
) -> A2aError
pub fn with_data( code: ErrorCode, message: impl Into<String>, data: Value, ) -> A2aError
Creates a new A2aError with the given code, message, and data.
Sourcepub fn task_not_found(task_id: impl Display) -> A2aError
pub fn task_not_found(task_id: impl Display) -> A2aError
Creates a “Task not found” error for the given task ID string.
Sourcepub fn task_not_cancelable(task_id: impl Display) -> A2aError
pub fn task_not_cancelable(task_id: impl Display) -> A2aError
Creates a “Task not cancelable” error.
Sourcepub fn internal(msg: impl Into<String>) -> A2aError
pub fn internal(msg: impl Into<String>) -> A2aError
Creates an internal error with the provided message.
Sourcepub fn invalid_params(msg: impl Into<String>) -> A2aError
pub fn invalid_params(msg: impl Into<String>) -> A2aError
Creates an “Invalid params” error.
Sourcepub fn is_stream_lagged(&self) -> bool
pub fn is_stream_lagged(&self) -> bool
Returns true when this error is the recoverable consumer-lag signal
a server emits on a streaming subscription.
This is not a terminal error. The server surfaces it to say “you
read too slowly and n events were dropped”; the stream continues, and
a consumer that keeps polling still receives every later event,
including the terminal status. A consumer that treats it like any other
error and stops reading will silently miss the end of the task.
It is detected by the STREAM_LAGGED_MARKER key in A2aError::data
rather than by code or message, because the code is a generic
InternalError and the message is human-facing prose.
use a2a_protocol_types::error::{A2aError, ErrorCode};
let lag = A2aError::stream_lagged(7);
assert!(lag.is_stream_lagged());
assert_eq!(lag.dropped_event_count(), Some(7));
// An ordinary internal error is not a lag signal.
assert!(!A2aError::internal("boom").is_stream_lagged());
assert!(!A2aError::new(ErrorCode::TaskNotFound, "gone").is_stream_lagged());Sourcepub fn dropped_event_count(&self) -> Option<u64>
pub fn dropped_event_count(&self) -> Option<u64>
Returns how many events were dropped, when this is a consumer-lag
signal (see A2aError::is_stream_lagged); None otherwise.
Sourcepub fn stream_lagged(dropped: u64) -> A2aError
pub fn stream_lagged(dropped: u64) -> A2aError
Builds the consumer-lag signal carrying dropped.
Servers emit this; consumers identify it with
A2aError::is_stream_lagged. It lives here rather than in the server
crate so that both sides — and any third-party client — agree on one
definition of the marker.
Sourcepub fn unsupported_operation(msg: impl Into<String>) -> A2aError
pub fn unsupported_operation(msg: impl Into<String>) -> A2aError
Creates an “Unsupported operation” error.
Sourcepub fn parse_error(msg: impl Into<String>) -> A2aError
pub fn parse_error(msg: impl Into<String>) -> A2aError
Creates a “Parse error” error.
Sourcepub fn invalid_agent_response(msg: impl Into<String>) -> A2aError
pub fn invalid_agent_response(msg: impl Into<String>) -> A2aError
Creates an “Invalid agent response” error.
Sourcepub fn extended_card_not_configured(msg: impl Into<String>) -> A2aError
pub fn extended_card_not_configured(msg: impl Into<String>) -> A2aError
Creates an “Extended agent card not configured” error.
Sourcepub fn push_not_supported(msg: impl Into<String>) -> A2aError
pub fn push_not_supported(msg: impl Into<String>) -> A2aError
Creates a “Push notification not supported” error.
Sourcepub fn content_type_not_supported(msg: impl Into<String>) -> A2aError
pub fn content_type_not_supported(msg: impl Into<String>) -> A2aError
Creates a “Content type not supported” error.
Sourcepub fn extension_support_required(msg: impl Into<String>) -> A2aError
pub fn extension_support_required(msg: impl Into<String>) -> A2aError
Creates an “Extension support required” error.
Sourcepub fn version_not_supported(msg: impl Into<String>) -> A2aError
pub fn version_not_supported(msg: impl Into<String>) -> A2aError
Creates a “Version not supported” error.
Sourcepub fn error_info_data(&self, metadata: Option<Value>) -> Value
pub fn error_info_data(&self, metadata: Option<Value>) -> Value
Builds the google.rpc.ErrorInfo data array as required by the spec.
Per Section 9.5, 10.6, and 11.6, A2A-specific errors MUST include
an ErrorInfo entry with @type, reason, domain, and optional metadata.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for A2aError
impl<'de> Deserialize<'de> for A2aError
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<A2aError, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<A2aError, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Error for A2aError
impl Error for A2aError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl From<A2aError> for ClientError
impl From<A2aError> for ClientError
Source§fn from(e: A2aError) -> ClientError
fn from(e: A2aError) -> ClientError
Source§impl From<A2aError> for ServerError
impl From<A2aError> for ServerError
Source§fn from(e: A2aError) -> ServerError
fn from(e: A2aError) -> ServerError
Source§impl Serialize for A2aError
impl Serialize for A2aError
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for A2aError
impl RefUnwindSafe for A2aError
impl Send for A2aError
impl Sync for A2aError
impl Unpin for A2aError
impl UnsafeUnpin for A2aError
impl UnwindSafe for A2aError
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request