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}