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
impl AgentCard
Sourcepub fn derive(
manifest: &Manifest,
url: impl Into<String>,
) -> Result<Self, ManifestError>
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.
Sourcepub fn manifest_digest(&self) -> Option<&str>
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
impl AgentCard
Sourcepub fn sign(
&mut self,
signer: &dyn CardSigner,
) -> Result<(), CardSignatureError>
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.
Sourcepub fn verify(
&self,
verifier: &dyn CardVerifier,
) -> Result<KeyId, CardSignatureError>
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
impl AgentCard
Sourcepub fn select_interface(
&self,
binding: &str,
version: &str,
) -> Option<&CardInterface>
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.
Sourcepub fn endpoint(&self) -> Result<Endpoint, DiscoveryError>
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<'de> Deserialize<'de> for AgentCard
impl<'de> Deserialize<'de> for AgentCard
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for AgentCard
impl StructuralPartialEq for AgentCard
Auto Trait Implementations§
impl Freeze for AgentCard
impl RefUnwindSafe for AgentCard
impl Send for AgentCard
impl Sync for AgentCard
impl Unpin for AgentCard
impl UnsafeUnpin for AgentCard
impl UnwindSafe for AgentCard
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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 more