Skip to main content

mls_spec/messages/
sender.rs

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