1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
pub extern crate nickel;
use self::nickel::hyper;
use self::hyper::header::ContentType;
pub use self::nickel::Request as NickelRequest;
pub use self::nickel::hyper::server::Request as HyperRequest;
use server::{HttpRequest, Multipart};
pub struct Maybe<'r, 'mw: 'r, 'server: 'mw, D: 'mw>(pub &'r mut NickelRequest<'mw, 'server, D>);
impl<'r, 'mw: 'r, 'server: 'mw, D: 'mw> HttpRequest for Maybe<'r, 'mw, 'server, D> {
type Body = &'r mut HyperRequest<'mw, 'server>;
fn multipart_boundary(&self) -> Option<&str> {
let cont_type = try_opt!(self.0.origin.headers.get::<ContentType>());
cont_type.get_param("boundary").map(|v| v.as_str())
}
fn body(self) -> Self::Body {
&mut self.0.origin
}
}
pub trait MultipartBody<'mw, 'server> {
fn multipart_body(&mut self) -> Option<Multipart<&mut HyperRequest<'mw, 'server>>>;
}
impl<'mw, 'server, D: 'mw> MultipartBody<'mw, 'server> for NickelRequest<'mw, 'server, D> {
fn multipart_body(&mut self) -> Option<Multipart<&mut HyperRequest<'mw, 'server>>> {
Multipart::from_request(Maybe(self)).ok()
}
}
impl<'r, 'mw: 'r, 'server: 'mw, D: 'mw> AsRef<&'r mut NickelRequest<'mw, 'server, D>> for Maybe<'r, 'mw, 'server, D> {
fn as_ref(&self) -> &&'r mut NickelRequest<'mw, 'server, D> {
&self.0
}
}
impl<'r, 'mw: 'r, 'server: 'mw, D: 'mw> AsMut<&'r mut NickelRequest<'mw, 'server, D>> for Maybe<'r, 'mw, 'server, D> {
fn as_mut(&mut self) -> &mut &'r mut NickelRequest<'mw, 'server, D> {
&mut self.0
}
}
impl<'r, 'mw: 'r, 'server: 'mw, D: 'mw> Into<&'r mut NickelRequest<'mw, 'server, D>> for Maybe<'r, 'mw, 'server, D> {
fn into(self) -> &'r mut NickelRequest<'mw, 'server, D> {
self.0
}
}
impl<'r, 'mw: 'r, 'server: 'mw, D: 'mw> From<&'r mut NickelRequest<'mw, 'server, D>> for Maybe<'r, 'mw, 'server, D> {
fn from(req: &'r mut NickelRequest<'mw, 'server, D>) -> Self {
Maybe(req)
}
}