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
// Copyright 2022 - 2023 Wenmeng See the COPYRIGHT
// file at the top-level directory of this distribution.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//
// Author: tickbh
// -----
// Created Date: 2023/08/21 06:03:19
use std::fmt;
#[derive(Debug)]
pub enum HttpError {
/// 数据太小不足以支持读
BufTooShort,
/// Invalid byte in header name.
HeaderName,
/// Invalid byte in header value.
HeaderValue,
/// Invalid byte in new line.
NewLine,
/// Invalid byte in Response status.
Status,
/// Invalid byte where token is required.
Token,
/// Invalid byte in HTTP version.
Version,
/// 无效的method方法
Method,
/// Partial
Partial,
/// StatusCode
InvalidStatusCode,
/// Scheme 太长了
SchemeTooLong,
}
impl HttpError {
#[inline]
pub fn description_str(&self) -> &'static str {
match *self {
HttpError::BufTooShort => "buf too short",
HttpError::HeaderName => "invalid header name",
HttpError::HeaderValue => "invalid header value",
HttpError::NewLine => "invalid new line",
HttpError::Status => "invalid response status",
HttpError::Token => "invalid token",
HttpError::Version => "invalid HTTP version",
HttpError::Method => "invalid HTTP Method",
HttpError::Partial => "invalid HTTP length",
HttpError::InvalidStatusCode => "invalid status code",
HttpError::SchemeTooLong => "scheme too long",
}
}
}
impl fmt::Display for HttpError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.description_str())
}
}