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