moq_lite/ietf/
setup.rs

1use crate::{
2	coding::*,
3	ietf::{Message, Parameters, Version as IetfVersion},
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	const ID: u64 = 0x20;
18
19	/// Decode a client setup message.
20	fn decode_msg<R: bytes::Buf>(r: &mut R, version: IetfVersion) -> Result<Self, DecodeError> {
21		let versions = Versions::decode(r, version)?;
22		let parameters = Parameters::decode(r, version)?;
23
24		Ok(Self { versions, parameters })
25	}
26
27	/// Encode a client setup message.
28	fn encode_msg<W: bytes::BufMut>(&self, w: &mut W, version: IetfVersion) {
29		self.versions.encode(w, version);
30		self.parameters.encode(w, version);
31	}
32}
33
34/// Sent by the server in response to a client setup.
35#[derive(Debug, Clone)]
36pub struct ServerSetup {
37	/// The list of supported versions in preferred order.
38	pub version: Version,
39
40	/// Supported extensions.
41	pub parameters: Parameters,
42}
43
44impl Message for ServerSetup {
45	const ID: u64 = 0x21;
46
47	fn encode_msg<W: bytes::BufMut>(&self, w: &mut W, version: IetfVersion) {
48		self.version.encode(w, version);
49		self.parameters.encode(w, version);
50	}
51
52	fn decode_msg<R: bytes::Buf>(r: &mut R, version: IetfVersion) -> Result<Self, DecodeError> {
53		let version = Version::decode(r, version)?;
54		let parameters = Parameters::decode(r, version)?;
55
56		Ok(Self { version, parameters })
57	}
58}