sftp_protocol/packet/
init.rs

1use super::kind::PacketType;
2use super::PayloadTrait;
3
4#[derive(Debug, Eq, PartialEq, Nom, Serialize)]
5#[nom(BigEndian)]
6#[cfg_attr(test, derive(test_strategy::Arbitrary))]
7pub struct Init {
8	pub version: u32,
9	#[serde(serialize_with = "crate::util::vec_u8_as_slice")]
10	pub extension_data: Vec<u8>
11}
12
13impl PayloadTrait for Init {
14	const Type: PacketType = PacketType::Init;
15	fn binsize(&self) -> u32 {
16		4 + self.extension_data.len() as u32
17	}
18}
19
20impl From<Init> for super::Payload {
21	fn from(p: Init) -> Self {
22		Self::Init(p)
23	}
24}
25
26#[cfg(test)]
27mod tests {
28	use test_strategy::proptest;
29	use crate::parser::encode;
30	use crate::parser::Parser;
31	use super::*;
32
33	#[proptest]
34	fn roundtrip_whole(input: Init) {
35		let mut stream = Parser::default();
36		let packet = input.into_packet();
37		stream.write(&encode(&packet)).unwrap();
38		assert_eq!(stream.get_packet(), Ok(Some(packet)));
39		assert_eq!(stream.get_packet(), Ok(None));
40	}
41}
42