liminal_protocol/wire/
envelope.rs1use super::{
2 AttachAttemptToken, ClientDiscriminant, ConversationId, DeliverySeq, DetachAttemptToken,
3 EnrollmentToken, Generation, LeaveAttemptToken, ParticipantId, RecordAdmissionAttemptToken,
4};
5
6#[derive(Clone, Debug, PartialEq, Eq)]
8pub struct EnrollmentEnvelope {
9 pub conversation_id: ConversationId,
11 pub enrollment_token: EnrollmentToken,
13}
14
15#[derive(Clone, Debug, PartialEq, Eq)]
17pub struct AttachEnvelope {
18 pub conversation_id: ConversationId,
20 pub participant_id: ParticipantId,
22 pub capability_generation: Generation,
24 pub attach_attempt_token: AttachAttemptToken,
26 pub accept_marker_delivery_seq: Option<DeliverySeq>,
28}
29
30#[derive(Clone, Debug, PartialEq, Eq)]
32pub struct DetachEnvelope {
33 pub conversation_id: ConversationId,
35 pub participant_id: ParticipantId,
37 pub capability_generation: Generation,
39 pub detach_attempt_token: DetachAttemptToken,
41}
42
43#[derive(Clone, Debug, PartialEq, Eq)]
45pub struct ParticipantAckEnvelope {
46 pub conversation_id: ConversationId,
48 pub participant_id: ParticipantId,
50 pub capability_generation: Generation,
52 pub through_seq: DeliverySeq,
54}
55
56#[derive(Clone, Debug, PartialEq, Eq)]
58pub struct LeaveEnvelope {
59 pub conversation_id: ConversationId,
61 pub participant_id: ParticipantId,
63 pub capability_generation: Generation,
65 pub leave_attempt_token: LeaveAttemptToken,
67}
68
69#[derive(Clone, Debug, PartialEq, Eq)]
71pub struct MarkerAckEnvelope {
72 pub conversation_id: ConversationId,
74 pub participant_id: ParticipantId,
76 pub capability_generation: Generation,
78 pub marker_delivery_seq: DeliverySeq,
80}
81
82#[derive(Clone, Debug, PartialEq, Eq)]
84pub struct RecordAdmissionEnvelope {
85 pub conversation_id: ConversationId,
87 pub participant_id: ParticipantId,
89 pub capability_generation: Generation,
91 pub record_admission_attempt_token: RecordAdmissionAttemptToken,
93}
94
95#[derive(Clone, Debug, PartialEq, Eq)]
97pub enum ResponseEnvelope {
98 Enrollment(EnrollmentEnvelope),
100 CredentialAttach(AttachEnvelope),
102 Detach(DetachEnvelope),
104 ParticipantAck(ParticipantAckEnvelope),
106 Leave(LeaveEnvelope),
108 MarkerAck(MarkerAckEnvelope),
110 RecordAdmission(RecordAdmissionEnvelope),
112}
113
114impl ResponseEnvelope {
115 #[must_use]
117 pub const fn originating_request(&self) -> ClientDiscriminant {
118 match self {
119 Self::Enrollment(_) => ClientDiscriminant::EnrollmentRequest,
120 Self::CredentialAttach(_) => ClientDiscriminant::CredentialAttachRequest,
121 Self::Detach(_) => ClientDiscriminant::DetachRequest,
122 Self::ParticipantAck(_) => ClientDiscriminant::ParticipantAck,
123 Self::Leave(_) => ClientDiscriminant::LeaveRequest,
124 Self::MarkerAck(_) => ClientDiscriminant::MarkerAck,
125 Self::RecordAdmission(_) => ClientDiscriminant::RecordAdmission,
126 }
127 }
128}