use serde::{Deserialize, Serialize};
use tls_codec::{TlsDeserialize, TlsDeserializeBytes, TlsSerialize, TlsSize};
use self::{leaf_node::LeafNodeIn, parent_node::ParentNode};
use super::LeafNode;
mod codec;
pub(crate) mod encryption_keys;
pub(crate) mod leaf_node;
pub(crate) mod parent_node;
#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, TlsSize, TlsSerialize)]
#[allow(clippy::large_enum_variant)]
#[repr(u8)]
pub enum Node {
#[tls_codec(discriminant = 1)]
LeafNode(LeafNode),
#[tls_codec(discriminant = 2)]
ParentNode(ParentNode),
}
#[derive(
Debug,
PartialEq,
Eq,
Clone,
Serialize,
Deserialize,
TlsSize,
TlsDeserialize,
TlsDeserializeBytes,
TlsSerialize,
)]
#[allow(clippy::large_enum_variant)]
#[repr(u8)]
pub enum NodeIn {
#[tls_codec(discriminant = 1)]
LeafNode(LeafNodeIn),
#[tls_codec(discriminant = 2)]
ParentNode(ParentNode),
}
impl From<Node> for NodeIn {
fn from(node: Node) -> Self {
match node {
Node::LeafNode(leaf_node) => NodeIn::LeafNode(leaf_node.into()),
Node::ParentNode(parent_node) => NodeIn::ParentNode(parent_node),
}
}
}
#[cfg(any(feature = "test-utils", test))]
impl From<NodeIn> for Node {
fn from(node: NodeIn) -> Self {
match node {
NodeIn::LeafNode(leaf_node) => Node::LeafNode(leaf_node.into()),
NodeIn::ParentNode(parent_node) => Node::ParentNode(parent_node),
}
}
}
pub(crate) enum NodeReference<'a> {
Leaf(&'a LeafNode),
Parent(&'a ParentNode),
}
#[cfg(test)]
impl Node {
#[allow(unused)]
pub(crate) fn into_leaf(self) -> LeafNode {
match self {
Node::LeafNode(l) => l,
Node::ParentNode(_) => panic!("Tried to convert parent node into leaf node."),
}
}
}