sftp_protocol/packet/
fsetstat.rs1use 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