use super::{
AttachAttemptToken, ClientDiscriminant, ConversationId, DeliverySeq, DetachAttemptToken,
EnrollmentToken, Generation, LeaveAttemptToken, ParticipantId, RecordAdmissionAttemptToken,
};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct EnrollmentEnvelope {
pub conversation_id: ConversationId,
pub enrollment_token: EnrollmentToken,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct AttachEnvelope {
pub conversation_id: ConversationId,
pub participant_id: ParticipantId,
pub capability_generation: Generation,
pub attach_attempt_token: AttachAttemptToken,
pub accept_marker_delivery_seq: Option<DeliverySeq>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct DetachEnvelope {
pub conversation_id: ConversationId,
pub participant_id: ParticipantId,
pub capability_generation: Generation,
pub detach_attempt_token: DetachAttemptToken,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ParticipantAckEnvelope {
pub conversation_id: ConversationId,
pub participant_id: ParticipantId,
pub capability_generation: Generation,
pub through_seq: DeliverySeq,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct LeaveEnvelope {
pub conversation_id: ConversationId,
pub participant_id: ParticipantId,
pub capability_generation: Generation,
pub leave_attempt_token: LeaveAttemptToken,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct MarkerAckEnvelope {
pub conversation_id: ConversationId,
pub participant_id: ParticipantId,
pub capability_generation: Generation,
pub marker_delivery_seq: DeliverySeq,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct RecordAdmissionEnvelope {
pub conversation_id: ConversationId,
pub participant_id: ParticipantId,
pub capability_generation: Generation,
pub record_admission_attempt_token: RecordAdmissionAttemptToken,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum ResponseEnvelope {
Enrollment(EnrollmentEnvelope),
CredentialAttach(AttachEnvelope),
Detach(DetachEnvelope),
ParticipantAck(ParticipantAckEnvelope),
Leave(LeaveEnvelope),
MarkerAck(MarkerAckEnvelope),
RecordAdmission(RecordAdmissionEnvelope),
}
impl ResponseEnvelope {
#[must_use]
pub const fn originating_request(&self) -> ClientDiscriminant {
match self {
Self::Enrollment(_) => ClientDiscriminant::EnrollmentRequest,
Self::CredentialAttach(_) => ClientDiscriminant::CredentialAttachRequest,
Self::Detach(_) => ClientDiscriminant::DetachRequest,
Self::ParticipantAck(_) => ClientDiscriminant::ParticipantAck,
Self::Leave(_) => ClientDiscriminant::LeaveRequest,
Self::MarkerAck(_) => ClientDiscriminant::MarkerAck,
Self::RecordAdmission(_) => ClientDiscriminant::RecordAdmission,
}
}
}