Skip to content

Commit 20391ad

Browse files
authored
Merge pull request #5 from jtgeibel/use-http-types
Bump to latest conduit alpha and use `http` types
2 parents 2f2191e + 838049c commit 20391ad

File tree

2 files changed

+31
-68
lines changed

2 files changed

+31
-68
lines changed

Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,4 @@ repository = "https://github.com/conduit-rust/conduit-test"
99
license = "MIT"
1010

1111
[dependencies]
12-
conduit = "0.9.0-alpha.0"
13-
semver = "0.9"
12+
conduit = "0.9.0-alpha.1"

src/lib.rs

Lines changed: 30 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,35 @@
11
#![warn(rust_2018_idioms)]
22
extern crate conduit;
3-
extern crate semver;
43

5-
use std::collections::HashMap;
64
use std::io::prelude::*;
75
use std::io::Cursor;
86
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4};
97

10-
use conduit::{Extensions, Headers, Host, Method, Scheme, TypeMap};
11-
use semver::Version;
8+
use conduit::{
9+
header::{HeaderName, HeaderValue},
10+
Extensions, HeaderMap, Host, Method, Scheme, TypeMap, Version,
11+
};
1212

1313
pub struct MockRequest {
1414
path: String,
1515
method: Method,
1616
query_string: Option<String>,
1717
body: Option<Vec<u8>>,
18-
build_headers: HashMap<String, String>,
19-
headers: MockHeaders,
18+
headers: HeaderMap,
2019
extensions: TypeMap,
2120
reader: Option<Cursor<Vec<u8>>>,
2221
}
2322

2423
impl MockRequest {
2524
pub fn new(method: Method, path: &str) -> MockRequest {
26-
let headers = HashMap::new();
25+
let headers = HeaderMap::new();
2726

2827
MockRequest {
2928
path: path.to_string(),
3029
extensions: TypeMap::new(),
3130
query_string: None,
3231
body: None,
33-
build_headers: headers,
34-
headers: MockHeaders {
35-
headers: HashMap::new(),
36-
},
32+
headers,
3733
method,
3834
reader: None,
3935
}
@@ -60,50 +56,20 @@ impl MockRequest {
6056
self
6157
}
6258

63-
pub fn header(&mut self, name: &str, value: &str) -> &mut MockRequest {
64-
self.build_headers
65-
.insert(name.to_string(), value.to_string());
66-
let headers = MockHeaders {
67-
headers: self.build_headers.clone(),
68-
};
69-
self.headers = headers;
70-
71-
self
72-
}
73-
}
74-
75-
pub struct MockHeaders {
76-
headers: HashMap<String, String>,
77-
}
78-
79-
impl Headers for MockHeaders {
80-
fn find(&self, key: &str) -> Option<Vec<&str>> {
81-
self.headers.get(key).map(|v| vec![&v[..]])
82-
}
83-
84-
fn has(&self, key: &str) -> bool {
85-
self.headers.contains_key(key)
86-
}
87-
88-
fn all(&self) -> Vec<(&str, Vec<&str>)> {
59+
pub fn header(&mut self, name: HeaderName, value: &str) -> &mut MockRequest {
8960
self.headers
90-
.iter()
91-
.map(|(k, v)| (&k[..], vec![&v[..]]))
92-
.collect()
61+
.insert(name, HeaderValue::from_str(value).unwrap());
62+
self
9363
}
9464
}
9565

96-
impl conduit::Request for MockRequest {
66+
impl conduit::RequestExt for MockRequest {
9767
fn http_version(&self) -> Version {
98-
Version::parse("1.1.0").unwrap()
99-
}
100-
101-
fn conduit_version(&self) -> Version {
102-
Version::parse("0.1.0").unwrap()
68+
Version::HTTP_11
10369
}
10470

105-
fn method(&self) -> Method {
106-
self.method.clone()
71+
fn method(&self) -> &Method {
72+
&self.method
10773
}
10874
fn scheme(&self) -> Scheme {
10975
Scheme::Http
@@ -131,8 +97,8 @@ impl conduit::Request for MockRequest {
13197
self.body.as_ref().map(|b| b.len() as u64)
13298
}
13399

134-
fn headers(&self) -> &dyn Headers {
135-
&self.headers as &dyn Headers
100+
fn headers(&self) -> &HeaderMap {
101+
&self.headers
136102
}
137103

138104
fn body(&mut self) -> &mut dyn Read {
@@ -154,19 +120,17 @@ impl conduit::Request for MockRequest {
154120
#[cfg(test)]
155121
mod tests {
156122
use super::MockRequest;
157-
use semver::Version;
158123

159124
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4};
160125

161-
use conduit::{Host, Method, Request, Scheme};
126+
use conduit::{header, Host, Method, RequestExt, Scheme, Version};
162127

163128
#[test]
164129
fn simple_request_test() {
165-
let mut req = MockRequest::new(Method::Get, "/");
130+
let mut req = MockRequest::new(Method::GET, "/");
166131

167-
assert_eq!(req.http_version(), Version::parse("1.1.0").unwrap());
168-
assert_eq!(req.conduit_version(), Version::parse("0.1.0").unwrap());
169-
assert_eq!(req.method(), Method::Get);
132+
assert_eq!(req.http_version(), Version::HTTP_11);
133+
assert_eq!(req.method(), Method::GET);
170134
assert_eq!(req.scheme(), Scheme::Http);
171135
assert_eq!(req.host(), Host::Name("example.com"));
172136
assert_eq!(req.virtual_root(), None);
@@ -177,18 +141,18 @@ mod tests {
177141
SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 80))
178142
);
179143
assert_eq!(req.content_length(), None);
180-
assert_eq!(req.headers().all().len(), 0);
144+
assert_eq!(req.headers().len(), 0);
181145
let mut s = String::new();
182146
req.body().read_to_string(&mut s).ok().expect("No body");
183147
assert_eq!(s, "".to_string());
184148
}
185149

186150
#[test]
187151
fn request_body_test() {
188-
let mut req = MockRequest::new(Method::Post, "/articles");
152+
let mut req = MockRequest::new(Method::POST, "/articles");
189153
req.with_body(b"Hello world");
190154

191-
assert_eq!(req.method(), Method::Post);
155+
assert_eq!(req.method(), Method::POST);
192156
assert_eq!(req.path(), "/articles");
193157
let mut s = String::new();
194158
req.body().read_to_string(&mut s).ok().expect("No body");
@@ -198,20 +162,20 @@ mod tests {
198162

199163
#[test]
200164
fn request_query_test() {
201-
let mut req = MockRequest::new(Method::Post, "/articles");
165+
let mut req = MockRequest::new(Method::POST, "/articles");
202166
req.with_query("foo=bar");
203167

204168
assert_eq!(req.query_string().expect("No query string"), "foo=bar");
205169
}
206170

207171
#[test]
208172
fn request_headers() {
209-
let mut req = MockRequest::new(Method::Post, "/articles");
210-
req.header("User-Agent", "lulz");
211-
req.header("DNT", "1");
173+
let mut req = MockRequest::new(Method::POST, "/articles");
174+
req.header(header::USER_AGENT, "lulz");
175+
req.header(header::DNT, "1");
212176

213-
assert_eq!(req.headers().all().len(), 2);
214-
assert_eq!(req.headers().find("User-Agent").unwrap(), vec!("lulz"));
215-
assert_eq!(req.headers().find("DNT").unwrap(), vec!("1"));
177+
assert_eq!(req.headers().len(), 2);
178+
assert_eq!(req.headers().get(header::USER_AGENT).unwrap(), "lulz");
179+
assert_eq!(req.headers().get(header::DNT).unwrap(), "1");
216180
}
217181
}

0 commit comments

Comments
 (0)