Skip to main content

sark_http/field/metadata/block/
mod.rs

1use crate::field::metadata::map::record::Span;
2
3pub mod buffer;
4mod framing;
5mod gate;
6mod name;
7mod outcome;
8mod plan;
9mod scan;
10pub mod table;
11mod value;
12
13pub use framing::{Content, ContentError, Framing};
14pub use gate::Gate;
15pub use name::Name;
16pub use outcome::Outcome;
17pub use plan::Plan;
18pub use scan::Scan;
19pub use value::Value;
20
21/// A classification bound to the immutable bytes that established it.
22#[derive(Clone, Copy, PartialEq, Eq)]
23pub struct Named<'a> {
24    span: Span<'a>,
25    proof: Name,
26}
27
28impl<'a> Named<'a> {
29    pub fn from_span(span: Span<'a>) -> Self {
30        Self::from_scanned(span, Name::from_span(span))
31    }
32
33    pub const fn from_slice(bytes: &'a [u8]) -> Self {
34        Self::from_scanned(Span::from_slice(bytes), Name::classify(bytes))
35    }
36
37    pub(crate) const fn from_scanned(span: Span<'a>, proof: Name) -> Self {
38        Self { span, proof }
39    }
40
41    pub const fn span(self) -> Span<'a> {
42        self.span
43    }
44
45    pub const fn proof(self) -> Name {
46        self.proof
47    }
48}
49
50/// Value bytes with their retained admission verdict.
51/// A rejected source field remains rejected when its value is reused.
52#[derive(Clone, Copy, PartialEq, Eq)]
53pub struct Valued<'a> {
54    span: Span<'a>,
55    validation: Validation,
56}
57
58impl<'a> Valued<'a> {
59    pub fn from_span(span: Span<'a>) -> Self {
60        Self::from_scanned(span, Value::from_span(span).finish())
61    }
62
63    pub(crate) const fn from_scanned(span: Span<'a>, check: Validation) -> Self {
64        Self {
65            span,
66            validation: check,
67        }
68    }
69
70    pub const fn span(self) -> Span<'a> {
71        self.span
72    }
73
74    pub const fn validation(self) -> Validation {
75        self.validation
76    }
77}
78
79#[derive(Clone, Copy, PartialEq, Eq)]
80#[repr(u8)]
81pub enum Kind {
82    Request,
83    Response,
84    Trailers,
85    PushPromise,
86}
87
88/// Extended CONNECT capability advertised by the peer.
89#[derive(Clone, Copy, PartialEq, Eq)]
90#[repr(u8)]
91pub enum Connect {
92    Disabled,
93    Enabled,
94}
95
96/// Header validation rules selected by the wire protocol.
97#[derive(Clone, Copy, PartialEq, Eq)]
98#[repr(u8)]
99pub enum Version {
100    Two,
101    Three,
102}
103
104#[derive(Clone, Copy, PartialEq, Eq, Debug)]
105#[repr(u8)]
106pub enum Validation {
107    Valid,
108    Malformed,
109    RejectPush,
110}
111
112/// The message phase established by a valid compressed response status.
113#[derive(Clone, Copy, Debug, PartialEq, Eq)]
114pub enum Response {
115    Informational,
116    Final,
117}
118
119#[derive(Clone, Copy, Debug, PartialEq, Eq)]
120#[repr(u8)]
121pub enum Form {
122    Path,
123    Asterisk,
124    Connect,
125    ExtendedConnect,
126}
127
128#[derive(Clone, Copy, Debug, PartialEq, Eq)]
129#[repr(u8)]
130pub enum Authority {
131    None,
132    Pseudo,
133    Host,
134    Target,
135}
136
137const _: () = {
138    assert!(core::mem::size_of::<Connect>() == core::mem::size_of::<bool>());
139    assert!(core::mem::align_of::<Connect>() == core::mem::align_of::<bool>());
140    assert!(core::mem::size_of::<Version>() == core::mem::size_of::<bool>());
141    assert!(core::mem::align_of::<Version>() == core::mem::align_of::<bool>());
142};