Skip to main content

sark_core/http/
field.rs

1#[derive(Copy, Clone, Debug, PartialEq, Eq)]
2pub struct Field<'a> {
3    pub name: &'a [u8],
4    pub value: &'a [u8],
5}
6
7impl<'a> Field<'a> {
8    pub const fn new(name: &'a [u8], value: &'a [u8]) -> Self {
9        Self { name, value }
10    }
11}
12
13#[derive(Clone, Debug, PartialEq, Eq)]
14pub struct OwnedField {
15    pub name: Vec<u8>,
16    pub value: Vec<u8>,
17}
18
19impl OwnedField {
20    pub fn from(field: Field<'_>) -> Self {
21        Self {
22            name: field.name.to_vec(),
23            value: field.value.to_vec(),
24        }
25    }
26
27    pub fn as_ref(&self) -> Field<'_> {
28        Field {
29            name: &self.name,
30            value: &self.value,
31        }
32    }
33}
34
35#[derive(Clone, Debug, Default, PartialEq, Eq)]
36pub struct FieldBlock {
37    fields: Vec<OwnedField>,
38}
39
40impl FieldBlock {
41    pub fn new() -> Self {
42        Self { fields: Vec::new() }
43    }
44
45    pub fn push(&mut self, name: &[u8], value: &[u8]) {
46        self.fields.push(OwnedField {
47            name: name.to_vec(),
48            value: value.to_vec(),
49        });
50    }
51
52    pub fn fields(&self) -> &[OwnedField] {
53        &self.fields
54    }
55
56    pub fn as_fields(&self) -> impl Iterator<Item = Field<'_>> {
57        self.fields.iter().map(OwnedField::as_ref)
58    }
59}