mls_spec/
messages.rs

1mod content;
2pub use self::content::*;
3mod content_type;
4pub use self::content_type::*;
5mod sender;
6pub use self::sender::*;
7mod message_kinds;
8pub use self::message_kinds::*;
9mod content_encryption;
10pub use self::content_encryption::*;
11
12use crate::defs::ProtocolVersion;
13
14/// MLS Message
15///
16/// <https://www.rfc-editor.org/rfc/rfc9420.html#section-6-4>
17///
18/// ## TLS Presentation Language
19///
20/// ```notrust,ignore
21/// struct {
22///     ProtocolVersion version = mls10;
23///     WireFormat wire_format;
24///     select (MLSMessage.wire_format) {
25///         case mls_public_message:
26///             PublicMessage public_message;
27///         case mls_private_message:
28///             PrivateMessage private_message;
29///         case mls_welcome:
30///             Welcome welcome;
31///         case mls_group_info:
32///             GroupInfo group_info;
33///         case mls_key_package:
34///             KeyPackage key_package;
35///     };
36/// } MLSMessage;
37/// ```
38#[derive(
39    Debug,
40    Clone,
41    PartialEq,
42    Eq,
43    tls_codec::TlsSerialize,
44    tls_codec::TlsDeserialize,
45    tls_codec::TlsSize,
46)]
47#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
48pub struct MlsMessage {
49    pub version: ProtocolVersion,
50    pub content: MlsMessageContent,
51}