Skip to main content

AgentCard

Struct AgentCard 

Source
pub struct AgentCard {
    pub name: String,
    pub description: String,
    pub version: String,
    pub capabilities: CardCapabilities,
    pub supported_interfaces: Vec<CardInterface>,
    pub default_input_modes: Vec<String>,
    pub default_output_modes: Vec<String>,
    pub skills: Vec<CardSkill>,
    pub security_schemes: BTreeMap<String, CardSecurityScheme>,
    pub security_requirements: Vec<CardSecurityRequirement>,
    pub signatures: Vec<CardSignature>,
}
Expand description

An A2A Agent Card, derived from a manifest.

Fields§

§name: String§description: String§version: String§capabilities: CardCapabilities§supported_interfaces: Vec<CardInterface>§default_input_modes: Vec<String>§default_output_modes: Vec<String>§skills: Vec<CardSkill>§security_schemes: BTreeMap<String, CardSecurityScheme>

How to authenticate every non-card operation on this interface.

§security_requirements: Vec<CardSecurityRequirement>§signatures: Vec<CardSignature>

Detached JWS signatures over this card.

Several are allowed so a publisher can rotate keys without a window in which nobody can verify the card.

Implementations§

Source§

impl AgentCard

Source

pub fn derive( manifest: &Manifest, url: impl Into<String>, ) -> Result<Self, ManifestError>

Derive a card from a declaration.

url is deployment wiring rather than a property of the agent — the same split as an API key: where an agent is reachable changes with the deployment, and an agent’s declaration must not change when its address does.

§Errors

If the manifest’s digest cannot be computed.

Source

pub fn manifest_digest(&self) -> Option<&str>

The digest of the manifest this card was derived from, when the card declares one.

Carried as a declared extension rather than a top-level field: the A2A schema forbids unknown properties on a card, so a spec-conforming peer could refuse the whole document over an extra key. The information survives — it is what lets a caller tell two cards with the same name and version apart when the declaration behind them changed. A version string is what an author remembered to bump; a digest is what the document actually says.

Source§

impl AgentCard

Source

pub fn sign( &mut self, signer: &dyn CardSigner, ) -> Result<(), CardSignatureError>

Sign this card, appending the signature.

Appending rather than replacing: A2A allows several signatures so a publisher can rotate keys without a window in which nobody can verify the card. Replacing would create exactly that window.

§Errors

If the card cannot be canonicalized.

Source

pub fn verify( &self, verifier: &dyn CardVerifier, ) -> Result<KeyId, CardSignatureError>

Check that some signature on this card was made by a trusted key.

§Errors

CardSignatureError::Unsigned when there are none, CardSignatureError::WrongAlgorithm for anything but ALG, and CardSignatureError::Untrusted when none verifies.

Source§

impl AgentCard

Source

pub fn select_interface( &self, binding: &str, version: &str, ) -> Option<&CardInterface>

The interface a client should use, following the spec’s selection rules.

Ordered: the first entry that speaks the requested binding at a compatible version wins. The order is the publisher’s preference, and scanning for a “best” one instead would quietly override the operator of the agent being called.

Version is matched on Major.Minor, as the spec requires. An agent may publish the same binding at several versions, so ignoring the version would pick an endpoint that speaks a protocol this client does not.

Source

pub fn endpoint(&self) -> Result<Endpoint, DiscoveryError>

An endpoint for this crate’s A2A client, taken from the card.

The tenant travels with it, which is the part a hand-written endpoint gets wrong: A2A says to echo the selected interface’s tenant on every request and to omit it when the interface omits it. A client that skips that can only ever reach an agent serving the default tenant.

§Errors

DiscoveryError::NoUsableInterface when nothing on the card speaks JSON-RPC at this crate’s protocol version.

Trait Implementations§

Source§

impl Clone for AgentCard

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AgentCard

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for AgentCard

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for AgentCard

Source§

impl PartialEq for AgentCard

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for AgentCard

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for AgentCard

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> MaybeSend for T
where T: Send,

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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