1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use tls_codec::{TlsDeserialize, TlsSerialize, TlsSize};

use super::parent_node::{UnmergedLeaves, UnmergedLeavesError};

/// Node type. Can be either `Leaf` or `Parent`.
#[derive(PartialEq, Clone, Copy, Debug, TlsSerialize, TlsDeserialize, TlsSize)]
#[repr(u8)]
enum MlsNodeType {
    Leaf = 1,
    Parent = 2,
}

// Implementations for `ParentNode`

impl tls_codec::Deserialize for UnmergedLeaves {
    fn tls_deserialize<R: std::io::Read>(bytes: &mut R) -> Result<Self, tls_codec::Error>
    where
        Self: Sized,
    {
        let list = Vec::tls_deserialize(bytes)?;
        Self::try_from(list).map_err(|e| match e {
            UnmergedLeavesError::NotSorted => {
                tls_codec::Error::DecodingError("Unmerged leaves not sorted".into())
            }
        })
    }
}