http_request_uri/
lib.rs

1//! [Ref](https://datatracker.ietf.org/doc/html/rfc2616#section-5.1.2)
2
3#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
4pub enum RequestUri<'a> {
5    /// The alias is AbsPath
6    Origin {
7        path: &'a str,
8        query: Option<&'a str>,
9        fragment: Option<&'a str>,
10    },
11    AbsoluteUri {
12        scheme: &'a str,
13        username: Option<&'a str>,
14        password: Option<&'a str>,
15        host: &'a str,
16        port: Option<u16>,
17        path: &'a str,
18        query: Option<&'a str>,
19        fragment: Option<&'a str>,
20    },
21    Authority {
22        host: &'a str,
23        port: Option<u16>,
24    },
25    Asterisk,
26}
27
28#[cfg(feature = "http")]
29mod impl_http;
30
31#[cfg(test)]
32#[allow(dead_code)]
33const TEST_DATA: &[(&str, RequestUri<'_>)] = &[
34    //
35    ("*", RequestUri::Asterisk),
36    (
37        "http://www.w3.org/pub/WWW/TheProject.html",
38        RequestUri::AbsoluteUri {
39            scheme: "http",
40            username: None,
41            password: None,
42            host: "www.w3.org",
43            port: None,
44            path: "/pub/WWW/TheProject.html",
45            query: None,
46            fragment: None,
47        },
48    ),
49    (
50        "http://www.w3.org",
51        RequestUri::AbsoluteUri {
52            scheme: "http",
53            username: None,
54            password: None,
55            host: "www.w3.org",
56            port: None,
57            path: "/",
58            query: None,
59            fragment: None,
60        },
61    ),
62    (
63        "http://username:password@www.w3.org",
64        RequestUri::AbsoluteUri {
65            scheme: "http",
66            username: Some("username"),
67            password: Some("password"),
68            host: "www.w3.org",
69            port: None,
70            path: "/",
71            query: None,
72            fragment: None,
73        },
74    ),
75    (
76        "http://username@www.w3.org",
77        RequestUri::AbsoluteUri {
78            scheme: "http",
79            username: Some("username"),
80            password: None,
81            host: "www.w3.org",
82            port: None,
83            path: "/",
84            query: None,
85            fragment: None,
86        },
87    ),
88    (
89        "http://:password@www.w3.org",
90        RequestUri::AbsoluteUri {
91            scheme: "http",
92            username: None,
93            password: Some("password"),
94            host: "www.w3.org",
95            port: None,
96            path: "/",
97            query: None,
98            fragment: None,
99        },
100    ),
101    (
102        "/pub/WWW/TheProject.html",
103        RequestUri::Origin {
104            path: "/pub/WWW/TheProject.html",
105            query: None,
106            fragment: None,
107        },
108    ),
109    (
110        "/",
111        RequestUri::Origin {
112            path: "/",
113            query: None,
114            fragment: None,
115        },
116    ),
117    (
118        "/foo?bar=",
119        RequestUri::Origin {
120            path: "/foo",
121            query: Some("bar="),
122            fragment: None,
123        },
124    ),
125    //
126    (
127        "proxy.com",
128        RequestUri::Authority {
129            host: "proxy.com",
130            port: None,
131        },
132    ),
133    (
134        "proxy.com:443",
135        RequestUri::Authority {
136            host: "proxy.com",
137            port: Some(443),
138        },
139    ),
140];