moq_lite/lite/
setup.rs

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