A bunch of work
This commit is contained in:
@@ -7,9 +7,9 @@ use bytes::Bytes;
|
||||
|
||||
/// HTTP/2.0 Header
|
||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||
pub enum Header {
|
||||
pub enum Header<T = HeaderName> {
|
||||
Field {
|
||||
name: HeaderName,
|
||||
name: T,
|
||||
value: HeaderValue,
|
||||
},
|
||||
Authority(ByteStr),
|
||||
@@ -35,6 +35,22 @@ pub fn len(name: &HeaderName, value: &HeaderValue) -> usize {
|
||||
32 + n.len() + value.len()
|
||||
}
|
||||
|
||||
impl Header<Option<HeaderName>> {
|
||||
pub fn reify(self) -> Result<Header, HeaderValue> {
|
||||
use self::Header::*;
|
||||
|
||||
Ok(match self {
|
||||
Field { name: Some(n), value } => Field { name: n, value: value },
|
||||
Field { name: None, value } => return Err(value),
|
||||
Authority(v) => Authority(v),
|
||||
Method(v) => Method(v),
|
||||
Scheme(v) => Scheme(v),
|
||||
Path(v) => Path(v),
|
||||
Status(v) => Status(v),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl Header {
|
||||
pub fn new(name: Bytes, value: Bytes) -> Result<Header, DecoderError> {
|
||||
if name[0] == b':' {
|
||||
@@ -191,6 +207,20 @@ impl Header {
|
||||
}
|
||||
}
|
||||
|
||||
// Mostly for tests
|
||||
impl From<Header> for Header<Option<HeaderName>> {
|
||||
fn from(src: Header) -> Self {
|
||||
match src {
|
||||
Header::Field { name, value } => Header::Field { name: Some(name), value },
|
||||
Header::Authority(v) => Header::Authority(v),
|
||||
Header::Method(v) => Header::Method(v),
|
||||
Header::Scheme(v) => Header::Scheme(v),
|
||||
Header::Path(v) => Header::Path(v),
|
||||
Header::Status(v) => Header::Status(v),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Name<'a> {
|
||||
pub fn into_entry(self, value: Bytes) -> Result<Header, DecoderError> {
|
||||
match self {
|
||||
|
||||
Reference in New Issue
Block a user