Skip to main content

ra2a_ext/
lib.rs

1//! # ra2a-ext
2//!
3//! Extension utilities for the [A2A Rust SDK](https://crates.io/crates/ra2a).
4//!
5//! This crate provides [`CallInterceptor`](ra2a::client::CallInterceptor) and
6//! server-side [`CallInterceptor`](ra2a::server::CallInterceptor) implementations
7//! for activating and propagating A2A protocol extensions across agent chains.
8//!
9//! Aligned with Go's `a2aext` package.
10//!
11//! ## Components
12//!
13//! - **[`ExtensionActivator`]** — Client interceptor that requests extension
14//!   activation on outgoing calls, filtering by server-supported extensions.
15//! - **[`ServerPropagator`]** — Server interceptor that extracts extension-related
16//!   metadata and headers from incoming requests for downstream propagation.
17//! - **[`ClientPropagator`]** — Client interceptor that injects propagated extension
18//!   data into outgoing requests (for agent-to-agent chaining: A → B → C).
19//!
20//! ## Usage
21//!
22//! ```rust,no_run
23//! use ra2a_ext::ExtensionActivator;
24//! // Attach to a client to auto-request extensions on every call:
25//! let activator = ExtensionActivator::new(vec![
26//!     "urn:a2a:ext:duration".into(),
27//! ]);
28//! ```
29
30#![cfg_attr(docsrs, feature(doc_cfg))]
31#![deny(missing_docs)]
32#![deny(rustdoc::broken_intra_doc_links)]
33
34mod activator;
35mod propagator;
36mod util;
37
38pub use activator::ExtensionActivator;
39pub use propagator::{
40    ClientPropagator, ClientPropagatorConfig, PropagatorContext, ServerPropagator,
41    ServerPropagatorConfig, init_propagation,
42};