musdk_common/
common_http.rs

1pub mod header;
2pub mod status;
3
4use core::fmt;
5use std::borrow::Cow;
6
7use borsh::{BorshDeserialize, BorshSerialize};
8
9pub use header::Header;
10pub use status::Status;
11
12//TODO: Use concrete type
13pub type Url = String;
14pub type Body<'a> = Cow<'a, [u8]>;
15
16/// Represents a version of the HTTP spec.
17#[derive(PartialEq, PartialOrd, Copy, Clone, Eq, Ord, Hash, BorshSerialize, BorshDeserialize)]
18pub struct Version(Http);
19
20impl Version {
21    /// `HTTP/0.9`
22    pub const HTTP_09: Version = Version(Http::Http09);
23
24    /// `HTTP/1.0`
25    pub const HTTP_10: Version = Version(Http::Http10);
26
27    /// `HTTP/1.1`
28    pub const HTTP_11: Version = Version(Http::Http11);
29
30    /// `HTTP/2.0`
31    pub const HTTP_2: Version = Version(Http::H2);
32
33    /// `HTTP/3.0`
34    pub const HTTP_3: Version = Version(Http::H3);
35}
36
37#[derive(PartialEq, PartialOrd, Copy, Clone, Eq, Ord, Hash, BorshSerialize, BorshDeserialize)]
38enum Http {
39    Http09,
40    Http10,
41    Http11,
42    H2,
43    H3,
44}
45
46impl Default for Version {
47    #[inline]
48    fn default() -> Version {
49        Version::HTTP_11
50    }
51}
52
53impl fmt::Debug for Version {
54    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
55        use self::Http::*;
56
57        f.write_str(match self.0 {
58            Http09 => "HTTP/0.9",
59            Http10 => "HTTP/1.0",
60            Http11 => "HTTP/1.1",
61            H2 => "HTTP/2.0",
62            H3 => "HTTP/3.0",
63        })
64    }
65}
66
67#[derive(Debug, BorshSerialize, BorshDeserialize, Clone)]
68pub enum HttpMethod {
69    Get,
70    Head,
71    Post,
72    Put,
73    Patch,
74    Delete,
75    Options,
76}