1#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
4pub enum RequestUri<'a> {
5 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 ("*", 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 (
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];