#![allow(clippy::enum_variant_names)]
#![allow(clippy::result_large_err)]
#![allow(clippy::nonstandard_macro_braces)]
#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
extern crate alloc;
#[cfg(all(test, target_arch = "wasm32"))]
wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
#[cfg(all(test, target_arch = "wasm32"))]
use wasm_bindgen_test::wasm_bindgen_test as futures_test;
#[cfg(all(test, mls_build_async, not(target_arch = "wasm32")))]
use futures_test::test as futures_test;
#[cfg(test)]
macro_rules! hex {
($input:literal) => {
hex::decode($input).expect("invalid hex value")
};
}
#[cfg(test)]
macro_rules! load_test_case_json {
($name:ident, $generate:expr) => {
load_test_case_json!($name, $generate, to_vec_pretty)
};
($name:ident, $generate:expr, $to_json:ident) => {{
#[cfg(any(target_arch = "wasm32", not(feature = "std")))]
{
let _ = async { $generate };
serde_json::from_slice(include_bytes!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/test_data/",
stringify!($name),
".json"
)))
.unwrap()
}
#[cfg(all(not(target_arch = "wasm32"), feature = "std"))]
{
let path = concat!(
env!("CARGO_MANIFEST_DIR"),
"/test_data/",
stringify!($name),
".json"
);
if !std::path::Path::new(path).exists() {
std::fs::write(path, serde_json::$to_json(&$generate).unwrap()).unwrap();
}
serde_json::from_slice(&std::fs::read(path).unwrap()).unwrap()
}
}};
}
mod cipher_suite {
pub use mls_rs_core::crypto::CipherSuite;
}
pub use cipher_suite::CipherSuite;
mod protocol_version {
pub use mls_rs_core::protocol_version::ProtocolVersion;
}
pub use protocol_version::ProtocolVersion;
pub mod client;
pub mod client_builder;
mod client_config;
pub mod crypto;
pub mod extension;
#[cfg(feature = "external_client")]
#[cfg_attr(docsrs, doc(cfg(feature = "external_client")))]
pub mod external_client;
mod grease;
pub mod group;
mod hash_reference;
pub mod identity;
mod iter;
mod key_package;
pub(crate) mod map;
pub mod psk;
mod signer;
pub mod storage_provider;
pub use mls_rs_core::{
crypto::{CipherSuiteProvider, CryptoProvider},
group::GroupStateStorage,
identity::IdentityProvider,
key_package::KeyPackageStorage,
psk::PreSharedKeyStorage,
};
pub mod mls_rules {
pub use crate::group::{
mls_rules::{
CommitDirection, CommitOptions, CommitSource, DefaultMlsRules, EncryptionOptions,
},
proposal_filter::{ProposalBundle, ProposalInfo, ProposalSource},
};
#[cfg(feature = "by_ref_proposal")]
pub use crate::group::proposal_ref::ProposalRef;
}
pub use mls_rs_core::extension::{Extension, ExtensionList};
pub use crate::{
client::Client,
group::{
framing::{MlsMessage, MlsMessageDescription, WireFormat},
mls_rules::MlsRules,
Group,
},
key_package::{KeyPackage, KeyPackageRef},
};
pub mod error {
pub use crate::client::MlsError;
pub use mls_rs_core::error::{AnyError, IntoAnyError};
pub use mls_rs_core::extension::ExtensionError;
}
pub mod time {
pub use mls_rs_core::time::*;
}
mod tree_kem;
pub use mls_rs_codec;
mod private {
pub trait Sealed {}
}
use private::Sealed;
#[cfg(any(test, feature = "test_util"))]
#[doc(hidden)]
pub mod test_utils;