mls-spec 2.0.0

This crate is a repository of MLS / RFC9420-related data structures.
Documentation
use crate::defs::{LeafIndex, SenderIndex};

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum SenderType {
    Reserved = 0x00,
    Member = 0x01,
    External = 0x02,
    NewMemberProposal = 0x03,
    NewMemberCommit = 0x04,
}

#[derive(
    Debug,
    Clone,
    Copy,
    PartialEq,
    Eq,
    tls_codec::TlsSerialize,
    tls_codec::TlsDeserialize,
    tls_codec::TlsSize,
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum Sender {
    #[tls_codec(discriminant = "SenderType::Member")]
    Member(LeafIndex),
    #[tls_codec(discriminant = "SenderType::External")]
    External(SenderIndex),
    #[tls_codec(discriminant = "SenderType::NewMemberCommit")]
    NewMemberCommit,
    #[tls_codec(discriminant = "SenderType::NewMemberProposal")]
    NewMemberProposal,
}

impl From<&Sender> for SenderType {
    fn from(value: &Sender) -> Self {
        match value {
            Sender::Member(_) => SenderType::Member,
            Sender::External(_) => SenderType::External,
            Sender::NewMemberCommit => SenderType::NewMemberCommit,
            Sender::NewMemberProposal => SenderType::NewMemberProposal,
        }
    }
}