Skip to content

Commit f083a3f

Browse files
authored
Merge pull request #6 from jtgeibel/use-http-types
Bump to latest conduit alpha and use `http` types
2 parents a3959f7 + 10f6561 commit f083a3f

File tree

2 files changed

+33
-40
lines changed

2 files changed

+33
-40
lines changed

Cargo.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
[package]
22

33
name = "conduit-router"
4-
version = "0.9.0-alpha.0"
4+
version = "0.9.0-alpha.1"
55
authors = ["[email protected]"]
66
license = "MIT"
77
description = "Router middleware for conduit based on route-recognizer"
88
repository = "https://github.com/conduit-rust/conduit-router"
99

1010
[dependencies]
11-
conduit = "0.9.0-alpha.0"
11+
conduit = "0.9.0-alpha.1"
1212
route-recognizer = "0.1.0"
13-
semver = "0.9.0"

src/lib.rs

Lines changed: 31 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::collections::hash_map::{Entry, HashMap};
66
use std::error::Error;
77
use std::fmt;
88

9-
use conduit::{Handler, Method, Request, Response};
9+
use conduit::{box_error, Handler, HandlerResult, Method, RequestExt};
1010
use router::{Match, Router};
1111

1212
#[derive(Default)]
@@ -53,35 +53,35 @@ impl RouteBuilder {
5353
}
5454

5555
pub fn get<'a, H: Handler>(&'a mut self, pattern: &str, handler: H) -> &'a mut RouteBuilder {
56-
self.map(Method::Get, pattern, handler)
56+
self.map(Method::GET, pattern, handler)
5757
}
5858

5959
pub fn post<'a, H: Handler>(&'a mut self, pattern: &str, handler: H) -> &'a mut RouteBuilder {
60-
self.map(Method::Post, pattern, handler)
60+
self.map(Method::POST, pattern, handler)
6161
}
6262

6363
pub fn put<'a, H: Handler>(&'a mut self, pattern: &str, handler: H) -> &'a mut RouteBuilder {
64-
self.map(Method::Put, pattern, handler)
64+
self.map(Method::PUT, pattern, handler)
6565
}
6666

6767
pub fn delete<'a, H: Handler>(&'a mut self, pattern: &str, handler: H) -> &'a mut RouteBuilder {
68-
self.map(Method::Delete, pattern, handler)
68+
self.map(Method::DELETE, pattern, handler)
6969
}
7070

7171
pub fn head<'a, H: Handler>(&'a mut self, pattern: &str, handler: H) -> &'a mut RouteBuilder {
72-
self.map(Method::Head, pattern, handler)
72+
self.map(Method::HEAD, pattern, handler)
7373
}
7474
}
7575

7676
impl conduit::Handler for RouteBuilder {
77-
fn call(&self, request: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
77+
fn call(&self, request: &mut dyn RequestExt) -> HandlerResult {
7878
let m = {
7979
let method = request.method();
8080
let path = request.path();
8181

8282
match self.recognize(&method, path) {
8383
Ok(m) => m,
84-
Err(e) => return Err(Box::new(e) as Box<dyn Error + Send>),
84+
Err(e) => return Err(box_error(e)),
8585
}
8686
};
8787

@@ -110,29 +110,29 @@ pub trait RequestParams<'a> {
110110
fn params(self) -> &'a router::Params;
111111
}
112112

113-
pub fn params(req: &dyn Request) -> &router::Params {
113+
pub fn params(req: &dyn RequestExt) -> &router::Params {
114114
req.extensions()
115115
.find::<router::Params>()
116116
.expect("Missing params")
117117
}
118118

119-
impl<'a> RequestParams<'a> for &'a (dyn Request + 'a) {
119+
impl<'a> RequestParams<'a> for &'a (dyn RequestExt + 'a) {
120120
fn params(self) -> &'a router::Params {
121121
params(self)
122122
}
123123
}
124124

125125
#[cfg(test)]
126126
mod tests {
127-
extern crate semver;
128-
use std::collections::HashMap;
129127
use std::io;
130128
use std::net::SocketAddr;
131129

132130
use {RequestParams, RouteBuilder};
133131

134-
use conduit;
135-
use conduit::{Extensions, Handler, Headers, Host, Method, Scheme, TypeMap};
132+
use conduit::{
133+
vec_to_body, Extensions, Handler, HeaderMap, Host, Method, Response, Scheme, StatusCode,
134+
TypeMap, Version,
135+
};
136136

137137
struct RequestSentinel {
138138
method: Method,
@@ -150,15 +150,12 @@ mod tests {
150150
}
151151
}
152152

153-
impl conduit::Request for RequestSentinel {
154-
fn http_version(&self) -> semver::Version {
153+
impl conduit::RequestExt for RequestSentinel {
154+
fn http_version(&self) -> Version {
155155
unimplemented!()
156156
}
157-
fn conduit_version(&self) -> semver::Version {
158-
unimplemented!()
159-
}
160-
fn method(&self) -> Method {
161-
self.method.clone()
157+
fn method(&self) -> &Method {
158+
&self.method
162159
}
163160
fn scheme(&self) -> Scheme {
164161
unimplemented!()
@@ -181,7 +178,7 @@ mod tests {
181178
fn content_length(&self) -> Option<u64> {
182179
unimplemented!()
183180
}
184-
fn headers<'a>(&'a self) -> &'a dyn Headers {
181+
fn headers<'a>(&'a self) -> &HeaderMap {
185182
unimplemented!()
186183
}
187184
fn body<'a>(&'a mut self) -> &'a mut dyn io::Read {
@@ -198,31 +195,31 @@ mod tests {
198195
#[test]
199196
fn basic_get() {
200197
let router = test_router();
201-
let mut req = RequestSentinel::new(Method::Get, "/posts/1");
198+
let mut req = RequestSentinel::new(Method::GET, "/posts/1");
202199
let mut res = router.call(&mut req).ok().expect("No response");
203200

204-
assert_eq!(res.status, (200, "OK"));
201+
assert_eq!(res.status(), StatusCode::OK);
205202
let mut s = Vec::new();
206-
res.body.write_body(&mut s).unwrap();
207-
assert_eq!(s, b"1, Get");
203+
res.body_mut().write_body(&mut s).unwrap();
204+
assert_eq!(s, b"1, GET");
208205
}
209206

210207
#[test]
211208
fn basic_post() {
212209
let router = test_router();
213-
let mut req = RequestSentinel::new(Method::Post, "/posts/10");
210+
let mut req = RequestSentinel::new(Method::POST, "/posts/10");
214211
let mut res = router.call(&mut req).ok().expect("No response");
215212

216-
assert_eq!(res.status, (200, "OK"));
213+
assert_eq!(res.status(), StatusCode::OK);
217214
let mut s = Vec::new();
218-
res.body.write_body(&mut s).unwrap();
219-
assert_eq!(s, b"10, Post");
215+
res.body_mut().write_body(&mut s).unwrap();
216+
assert_eq!(s, b"10, POST");
220217
}
221218

222219
#[test]
223220
fn nonexistent_route() {
224221
let router = test_router();
225-
let mut req = RequestSentinel::new(Method::Post, "/nonexistent");
222+
let mut req = RequestSentinel::new(Method::POST, "/nonexistent");
226223
router.call(&mut req).err().expect("No response");
227224
}
228225

@@ -233,15 +230,12 @@ mod tests {
233230
router
234231
}
235232

236-
fn test_handler(req: &mut dyn conduit::Request) -> io::Result<conduit::Response> {
233+
fn test_handler(req: &mut dyn conduit::RequestExt) -> conduit::HttpResult {
237234
let mut res = vec![];
238235
res.push(req.params()["id"].clone());
239236
res.push(format!("{:?}", req.method()));
240237

241-
Ok(conduit::Response {
242-
status: (200, "OK"),
243-
headers: HashMap::new(),
244-
body: Box::new(io::Cursor::new(res.join(", ").into_bytes())),
245-
})
238+
let bytes = res.join(", ").into_bytes();
239+
Response::builder().body(vec_to_body(bytes))
246240
}
247241
}

0 commit comments

Comments
 (0)