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())
    }
}