mls_spec/messages/
sender.rs

1use crate::defs::{LeafIndex, SenderIndex};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[repr(u8)]
6pub enum SenderType {
7    Reserved = 0x00,
8    Member = 0x01,
9    External = 0x02,
10    NewMemberProposal = 0x03,
11    NewMemberCommit = 0x04,
12}
13
14#[derive(
15    Debug,
16    Clone,
17    Copy,
18    PartialEq,
19    Eq,
20    tls_codec::TlsSerialize,
21    tls_codec::TlsDeserialize,
22    tls_codec::TlsSize,
23)]
24#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
25#[repr(u8)]
26pub enum Sender {
27    #[tls_codec(discriminant = "SenderType::Member")]
28    Member(LeafIndex),
29    #[tls_codec(discriminant = "SenderType::External")]
30    External(SenderIndex),
31    #[tls_codec(discriminant = "SenderType::NewMemberCommit")]
32    NewMemberCommit,
33    #[tls_codec(discriminant = "SenderType::NewMemberProposal")]
34    NewMemberProposal,
35}
36
37impl From<&Sender> for SenderType {
38    fn from(value: &Sender) -> Self {
39        match value {
40            Sender::Member(_) => SenderType::Member,
41            Sender::External(_) => SenderType::External,
42            Sender::NewMemberCommit => SenderType::NewMemberCommit,
43            Sender::NewMemberProposal => SenderType::NewMemberProposal,
44        }
45    }
46}