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