1#[derive(Debug, PartialEq)]
4pub struct Chunk {
5 size: usize,
6 body: Vec<u8>,
7}
8
9impl Chunk {
10 pub fn new(size: usize, data: Vec<u8>) -> Self {
13 Self { size, body: data }
14 }
15
16 pub fn serialize(&self, buf: &mut Vec<u8>) {
19 let length = format!("{:x}", self.size);
20 buf.extend_from_slice(length.as_bytes());
21 buf.extend_from_slice("\r\n".as_bytes());
22 buf.extend_from_slice(&self.body);
23 buf.extend_from_slice("\r\n".as_bytes());
24 }
25
26 pub fn size(&self) -> usize {
28 self.size
29 }
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35
36 #[test]
37 fn serialize_valid() {
38 let tmp = Chunk::new(9, "Developer".as_bytes().to_vec());
39
40 let mut buf: Vec<u8> = Vec::new();
41 tmp.serialize(&mut buf);
42
43 assert_eq!("9\r\nDeveloper\r\n".as_bytes().to_vec(), buf);
44 }
45 #[test]
46 fn serialize_valid_2() {
47 let tmp = Chunk::new(
48 55,
49 "This is just some random Data to fill the Response with"
50 .as_bytes()
51 .to_vec(),
52 );
53
54 let mut buf: Vec<u8> = Vec::new();
55 tmp.serialize(&mut buf);
56
57 assert_eq!(
58 "37\r\nThis is just some random Data to fill the Response with\r\n"
59 .as_bytes()
60 .to_vec(),
61 buf
62 );
63 }
64}