1use alloc::vec::Vec;
2
3use super::{
4 AttachAttemptToken, AttachSecret, ClientDiscriminant, ConversationId, DeliverySeq,
5 DetachAttemptToken, EnrollmentToken, Generation, LeaveAttemptToken, ObserverEpoch,
6 ParticipantId, RecordAdmissionAttemptToken,
7};
8
9#[derive(Clone, Debug, PartialEq, Eq)]
11pub struct EnrollmentRequest {
12 pub conversation_id: ConversationId,
14 pub enrollment_token: EnrollmentToken,
16}
17
18#[derive(Clone, Debug, PartialEq, Eq)]
20pub struct CredentialAttachRequest {
21 pub conversation_id: ConversationId,
23 pub participant_id: ParticipantId,
25 pub capability_generation: Generation,
27 pub attach_secret: AttachSecret,
29 pub attach_attempt_token: AttachAttemptToken,
31 pub accept_marker_delivery_seq: Option<DeliverySeq>,
33}
34
35#[derive(Clone, Debug, PartialEq, Eq)]
37pub struct DetachRequest {
38 pub conversation_id: ConversationId,
40 pub participant_id: ParticipantId,
42 pub capability_generation: Generation,
44 pub detach_attempt_token: DetachAttemptToken,
46}
47
48#[derive(Clone, Debug, PartialEq, Eq)]
50pub struct ParticipantAck {
51 pub conversation_id: ConversationId,
53 pub participant_id: ParticipantId,
55 pub capability_generation: Generation,
57 pub through_seq: DeliverySeq,
59}
60
61#[derive(Clone, Debug, PartialEq, Eq)]
63pub struct LeaveRequest {
64 pub conversation_id: ConversationId,
66 pub participant_id: ParticipantId,
68 pub capability_generation: Generation,
70 pub attach_secret: AttachSecret,
72 pub leave_attempt_token: LeaveAttemptToken,
74}
75
76#[derive(Clone, Debug, PartialEq, Eq)]
78pub struct MarkerAck {
79 pub conversation_id: ConversationId,
81 pub participant_id: ParticipantId,
83 pub capability_generation: Generation,
85 pub marker_delivery_seq: DeliverySeq,
87}
88
89#[derive(Clone, Debug, PartialEq, Eq)]
91pub struct RecordAdmission {
92 pub conversation_id: ConversationId,
94 pub participant_id: ParticipantId,
96 pub capability_generation: Generation,
98 pub record_admission_attempt_token: RecordAdmissionAttemptToken,
100 pub payload: Vec<u8>,
102}
103
104#[derive(Clone, Copy, Debug, PartialEq, Eq)]
106pub struct ObserverRefusal {
107 pub conversation_id: ConversationId,
109 pub refused_epoch: ObserverEpoch,
111}
112
113#[derive(Clone, Debug, PartialEq, Eq)]
115pub struct ObserverRecoveryHandshake {
116 pub observer_refusals: Vec<ObserverRefusal>,
118}
119
120#[derive(Clone, Debug, PartialEq, Eq)]
122pub enum ClientRequest {
123 Enrollment(EnrollmentRequest),
125 CredentialAttach(CredentialAttachRequest),
127 Detach(DetachRequest),
129 ParticipantAck(ParticipantAck),
131 Leave(LeaveRequest),
133 MarkerAck(MarkerAck),
135 RecordAdmission(RecordAdmission),
137 ObserverRecovery(ObserverRecoveryHandshake),
139}
140
141impl ClientRequest {
142 #[must_use]
144 pub const fn discriminant(&self) -> ClientDiscriminant {
145 match self {
146 Self::Enrollment(_) => ClientDiscriminant::EnrollmentRequest,
147 Self::CredentialAttach(_) => ClientDiscriminant::CredentialAttachRequest,
148 Self::Detach(_) => ClientDiscriminant::DetachRequest,
149 Self::ParticipantAck(_) => ClientDiscriminant::ParticipantAck,
150 Self::Leave(_) => ClientDiscriminant::LeaveRequest,
151 Self::MarkerAck(_) => ClientDiscriminant::MarkerAck,
152 Self::RecordAdmission(_) => ClientDiscriminant::RecordAdmission,
153 Self::ObserverRecovery(_) => ClientDiscriminant::ObserverRecoveryHandshake,
154 }
155 }
156}