async_h1b/error.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
use std::str::Utf8Error;
use http_types::url;
use thiserror::Error;
/// Concrete errors that occur within async-h1
#[derive(Error, Debug)]
#[non_exhaustive]
pub enum Error {
/// [`std::io::Error`]
#[error(transparent)]
IO(#[from] std::io::Error),
/// [`url::ParseError`]
#[error(transparent)]
Url(#[from] url::ParseError),
/// this error describes a malformed request with a path that does
/// not start with / or http:// or https://
#[error("unexpected uri format")]
UnexpectedURIFormat,
/// this error describes a http 1.1 request that is missing a Host
/// header
#[error("mandatory host header missing")]
HostHeaderMissing,
/// this error describes a request that does not specify a path
#[error("request path missing")]
RequestPathMissing,
/// [`httparse::Error`]
#[error(transparent)]
Httparse(#[from] httparse::Error),
/// [`http_types::Error`]
//#[error(transparent)]
#[error("error type from http_types::Error")]
HttpTypes(/*#[from] */http_types::Error),
/// an incomplete http head
#[error("partial http head")]
PartialHead,
/// we were unable to parse a header
#[error("malformed http header {0}")]
MalformedHeader(&'static str),
/// async-h1 doesn't speak this http version
/// this error is deprecated
#[error("unsupported http version 1.{0}")]
UnsupportedVersion(u8),
/// we were unable to parse this http method
#[error("unsupported http method {0}")]
UnrecognizedMethod(String),
/// this request did not have a method
#[error("missing method")]
MissingMethod,
/// this request did not have a status code
#[error("missing status code")]
MissingStatusCode,
/// we were unable to parse this http method
#[error("unrecognized http status code {0}")]
UnrecognizedStatusCode(u16),
/// this request did not have a version, but we expect one
/// this error is deprecated
#[error("missing version")]
MissingVersion,
/// we expected utf8, but there was an encoding error
#[error(transparent)]
EncodingError(#[from] Utf8Error),
/// we received a header that does not make sense in context
#[error("unexpected header: {0}")]
UnexpectedHeader(&'static str),
/// for security reasons, we do not allow request headers beyond 8kb.
#[error("Head byte length should be less than 8kb")]
HeadersTooLong,
}
impl From<http_types::Error> for Error {
fn from(val: http_types::Error) -> Self {
Self::HttpTypes(val)
}
}
/// this crate's result type
pub type Result<T> = std::result::Result<T, Error>;