pub enum ChannelKind {
Slack,
Email,
Discord,
Teams,
Whatsapp,
GoogleChat,
Imessage,
Service,
Squillo,
}Expand description
The closed channel-kind vocabulary (§7.1.5), as a TYPE.
Why this exists. ChannelDescriptor.kind reached v0.1 as a bare
String, so nothing in this crate refused a value outside the closed
set — while the independent TypeScript implementation refused it at
parse. Two implementations of one specification reached opposite
verdicts on the same bytes, which is the defect class a second
implementation exists to surface. This enum is the same repair already
applied to AttestationMode above and StatusPurpose in
credential_status: model the closed set as a closed type, so an
unrecognized value is a constructible failure instead of a silent pass.
The wire field itself stays String in this revision (adopting the enum
as the field type is a deliberate, separate breaking change); verifiers
enforce the set via [crate::verification::require_closed_vocabulary].
Variants§
Slack
Wire value slack.
Wire value email.
Discord
Wire value discord.
Teams
Wire value teams.
Wire value whatsapp.
GoogleChat
Wire value google_chat — snake_case by erratum; every published
example and signed fixture emits this spelling.
Imessage
Wire value imessage.
Service
Wire value service — a service endpoint an agent delivers a
state-changing act to (RFC 0002). The endpoint IS the end-delivery
medium, which is why this is a channel kind and not a name for the
agent-to-agent rail that carried it (§1.1.1).
Squillo
Wire value squillo — an in-application messaging surface where a
human reads the message in that application’s client (RFC 0007). A
peer of Self::Slack and Self::Discord, not a layer across
them. NOT the membership-scope value of the same spelling that
RFC 0004 refused: this names the DELIVERY MEDIUM.
Implementations§
Trait Implementations§
Source§impl Clone for ChannelKind
impl Clone for ChannelKind
impl Copy for ChannelKind
Source§impl Debug for ChannelKind
impl Debug for ChannelKind
Source§impl<'de> Deserialize<'de> for ChannelKind
impl<'de> Deserialize<'de> for ChannelKind
Source§fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
Source§impl Display for ChannelKind
impl Display for ChannelKind
impl Eq for ChannelKind
Source§impl FromStr for ChannelKind
impl FromStr for ChannelKind
Source§fn from_str(label: &str) -> Result<Self, Self::Err>
fn from_str(label: &str) -> Result<Self, Self::Err>
The inverse of ChannelKind::label, and the ONE place the wire
spellings are matched. The error is a plain message, not an
crate::errors::AphError: §8.3 step 1 classifies an unrecognized
value as a STRICT-PARSE rejection, the layer below the protocol’s
closed set of error codes — exactly as the TypeScript implementation
models it with AphParseError. The message mirrors that
implementation’s shape so the two report the same failure the same way.