// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // Copyright by contributors to this project. // SPDX-License-Identifier: (Apache-2.0 OR MIT) pub use mls_rs_core::extension::{ExtensionType, MlsCodecExtension, MlsExtension}; pub(crate) use built_in::*; /// Default extension types required by the MLS RFC. pub mod built_in; #[cfg(test)] pub(crate) mod test_utils { use alloc::vec::Vec; use core::convert::Infallible; use core::fmt::Debug; use mls_rs_codec::{MlsDecode, MlsEncode, MlsSize}; use mls_rs_core::extension::MlsExtension; use super::*; pub const TEST_EXTENSION_TYPE: u16 = 42; #[derive(MlsSize, MlsEncode, MlsDecode, Clone, Debug, PartialEq)] pub(crate) struct TestExtension { pub(crate) foo: u8, } impl From for TestExtension { fn from(value: u8) -> Self { Self { foo: value } } } impl MlsExtension for TestExtension { type SerializationError = Infallible; type DeserializationError = Infallible; fn extension_type() -> ExtensionType { ExtensionType::from(TEST_EXTENSION_TYPE) } fn to_bytes(&self) -> Result, Self::SerializationError> { Ok([self.foo].to_vec()) } fn from_bytes(data: &[u8]) -> Result { Ok(TestExtension { foo: data[0] }) } } }