sftp_protocol/packet/
read.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 Read {
8	pub id: u32,
9	#[nom(Parse(crate::util::parse_uuid))]
10	#[serde(serialize_with = "crate::util::serialize_uuid")]
11	#[cfg_attr(test, strategy(crate::util::arbitrary_uuid()))]
12	pub handle: uuid::Uuid,
13	pub offset: u64,
14	pub len: u32,
15}
16
17impl PayloadTrait for Read {
18	const Type: PacketType = PacketType::Read;
19	fn binsize(&self) -> u32 {
20		4 + (4 + 36) + 8 + 4
21	}
22}
23
24impl From<Read> for super::Payload {
25	fn from(p: Read) -> Self {
26		Self::Read(p)
27	}
28}
29
30#[cfg(test)]
31mod tests {
32	use test_strategy::proptest;
33	use crate::parser::encode;
34	use crate::parser::Parser;
35	use super::*;
36
37	#[proptest]
38	fn roundtrip_whole(input: Read) {
39		let mut stream = Parser::default();
40		let packet = input.into_packet();
41		stream.write(&encode(&packet)).unwrap();
42		assert_eq!(stream.get_packet(), Ok(Some(packet)));
43		assert_eq!(stream.get_packet(), Ok(None));
44	}
45}
46