sark_http/payload/response/headers/
set.rs1use crate::payload::response::headers::{self, value};
2
3pub const DEFAULT_CAPACITY: usize = 4;
4pub struct Set<'req, const N: usize = DEFAULT_CAPACITY> {
5 entries: [value::Item<'req>; N],
6 len: usize,
7}
8
9impl<'req, const N: usize> Default for Set<'req, N> {
10 fn default() -> Self {
11 Self::new()
12 }
13}
14
15impl<'req, const N: usize> Set<'req, N> {
16 pub fn new() -> Self {
17 Self {
18 entries: [const { value::Item::placeholder() }; N],
19 len: 0,
20 }
21 }
22
23 pub fn from_items(items: [value::Item<'req>; N]) -> Self {
24 Self {
25 entries: items,
26 len: N,
27 }
28 }
29
30 pub fn is_empty(&self) -> bool {
31 self.len == 0
32 }
33
34 pub fn len(&self) -> usize {
35 self.len
36 }
37
38 pub(crate) fn fields(&self) -> impl ExactSizeIterator<Item = headers::Entry<'_>> + '_ {
39 self.entries[..self.len.min(N)]
40 .iter()
41 .map(|item| headers::Entry::new(item.name, item.value.borrow()))
42 }
43}
44
45impl<const N: usize> headers::Source for Set<'_, N> {
46 fn emit<'field>(&'field self, sink: &mut impl headers::Sink<'field>) {
47 for field in self.fields() {
48 sink.entry(field);
49 }
50 }
51}