moq_lite/message/
setup.rs

1use super::{Extensions, Version, Versions};
2use crate::coding::*;
3
4/// Sent by the client to setup the session.
5#[derive(Debug, Clone)]
6pub struct ClientSetup {
7	/// The list of supported versions in preferred order.
8	pub versions: Versions,
9
10	/// Extensions.
11	pub extensions: Extensions,
12}
13
14impl Message for ClientSetup {
15	/// Decode a client setup message.
16	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
17		let versions = Versions::decode(r)?;
18		let extensions = Extensions::decode(r)?;
19
20		Ok(Self { versions, extensions })
21	}
22
23	/// Encode a server setup message.
24	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
25		self.versions.encode(w);
26		self.extensions.encode(w);
27	}
28}
29
30/// Sent by the server in response to a client setup.
31#[derive(Debug, Clone)]
32pub struct ServerSetup {
33	/// The list of supported versions in preferred order.
34	pub version: Version,
35
36	/// Supported extenisions.
37	pub extensions: Extensions,
38}
39
40impl Message for ServerSetup {
41	fn encode<W: bytes::BufMut>(&self, w: &mut W) {
42		self.version.encode(w);
43		self.extensions.encode(w);
44	}
45
46	fn decode<R: bytes::Buf>(r: &mut R) -> Result<Self, DecodeError> {
47		let version = Version::decode(r)?;
48		let extensions = Extensions::decode(r)?;
49
50		Ok(Self { version, extensions })
51	}
52}