stream_httparse/
header.rs

1mod key;
2pub use key::HeaderKey;
3mod value;
4pub use value::HeaderValue;
5
6/// A single HTTP-Header Pair(Key-Value)
7#[derive(Clone, Debug)]
8pub struct Header<'a> {
9    /// The Key part of the Header
10    pub key: HeaderKey<'a>,
11    /// The Value assosicated with the Header
12    pub value: HeaderValue<'a>,
13}
14
15impl PartialEq for Header<'_> {
16    fn eq(&self, other: &Self) -> bool {
17        self.key.eq(&other.key)
18    }
19}
20
21impl<'a> Header<'a> {
22    /// Serializes the Header into the given Buffer
23    /// by appending the final Data to the End of it
24    pub fn serialize(&self, buf: &mut Vec<u8>) {
25        self.key.serialize(buf);
26        buf.extend_from_slice(": ".as_bytes());
27        self.value.serialize(buf);
28        buf.extend_from_slice("\r\n".as_bytes());
29    }
30
31    /// Clones all the assosicated Data to create a completly
32    /// new and independant Header instance
33    pub fn to_owned<'refed, 'owned>(&'refed self) -> Header<'owned> {
34        Header {
35            key: self.key.to_owned(),
36            value: self.value.to_owned(),
37        }
38    }
39}
40
41#[cfg(test)]
42mod tests {
43    use super::*;
44
45    #[test]
46    fn compare() {
47        assert_eq!(
48            Header {
49                key: HeaderKey::StrRef("test"),
50                value: HeaderValue::StrRef("value"),
51            },
52            Header {
53                key: HeaderKey::StrRef("test"),
54                value: HeaderValue::StrRef("some other value"),
55            }
56        );
57    }
58
59    #[test]
60    fn serialize() {
61        let header = Header {
62            key: HeaderKey::StrRef("test-key"),
63            value: HeaderValue::StrRef("test-value"),
64        };
65
66        let mut buf: Vec<u8> = Vec::new();
67        header.serialize(&mut buf);
68        assert_eq!("test-key: test-value\r\n".as_bytes(), &buf);
69    }
70}