sftp_protocol/packet/
fsetstat.rs

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