Struct Server

Source
pub struct Server { /* private fields */ }
Expand description

Routes requests to various Handlers based on the request URL, and runs the actual HTTP server and async event loop.

Implementations§

Source§

impl Server

Source

pub fn new() -> Server

Examples found in repository?
examples/1.rs (line 9)
8fn main() {
9  let mut server = Server::new();
10  // code will be added here
11  server.listen("127.0.0.1:3000");
12}
More examples
Hide additional examples
examples/2.rs (line 9)
8fn main() {
9  let mut server = Server::new();
10  server.resource("/cats", move |req: Request| {
11    Error::server_error("we haven't implemented this yet!")
12  });
13  server.listen("127.0.0.1:3000");
14}
examples/3.rs (line 9)
8fn main() {
9  let mut server = Server::new();
10  let database = memory::MemoryAdapter::new();
11  server.resource("/cats", move |req: Request| {
12    database.handle(req)
13  });
14  server.listen("127.0.0.1:3000");
15}
examples/5.rs (line 9)
8fn main() {
9  let mut server = Server::new();
10  use std::sync::Arc;
11  let database = Arc::new(memory::MemoryAdapter::new());
12  server.resource("/cats", move |req: Request| {
13    let database1 = database.clone();
14    req
15      .and_then(move |req| {
16        database1.handle(req)
17      })
18  });
19  server.listen("127.0.0.1:3000");
20}
examples/4.rs (line 9)
8fn main() {
9  let mut server = Server::new();
10  let database = memory::MemoryAdapter::new();
11  server.resource("/cats", move |req: Request| {
12    database.handle(req).and_then(|mut reply| {
13      {
14          let mut data = reply.data_mut().unwrap();
15          data.insert("example".to_string(), json!("data"));
16      }
17      reply
18    })
19  });
20  server.listen("127.0.0.1:3000");
21}
examples/7.rs (line 9)
8fn main() {
9  let mut server = Server::new();
10  use std::sync::Arc;
11  use std::ops::Deref;
12  let database = Arc::new(memory::MemoryAdapter::new());
13  let chan = Arc::new(memory::MemoryChannel::new());
14  server.resource("/cats", move |req: Request| {
15    let database1 = database.clone();
16    let chan1 = chan.clone();
17    let chan2 = chan.clone();
18    req
19      .and_then(move |req| {
20        match req.method() {
21          Method::Listen => chan1.handle(req),
22          _ => database1.handle(req),
23        }
24      })
25      .and_then(move |reply| {
26        util::send_from_reply(reply, chan2.deref())
27      })
28  });
29  server.listen("127.0.0.1:3000");
30}
Source

pub fn handle(&self, req: Request) -> BoxFuture<Reply, Error>

Source

pub fn resource<T: Into<String>, R: Handler + 'static>( &mut self, route: T, handler: R, )

Examples found in repository?
examples/2.rs (lines 10-12)
8fn main() {
9  let mut server = Server::new();
10  server.resource("/cats", move |req: Request| {
11    Error::server_error("we haven't implemented this yet!")
12  });
13  server.listen("127.0.0.1:3000");
14}
More examples
Hide additional examples
examples/3.rs (lines 11-13)
8fn main() {
9  let mut server = Server::new();
10  let database = memory::MemoryAdapter::new();
11  server.resource("/cats", move |req: Request| {
12    database.handle(req)
13  });
14  server.listen("127.0.0.1:3000");
15}
examples/5.rs (lines 12-18)
8fn main() {
9  let mut server = Server::new();
10  use std::sync::Arc;
11  let database = Arc::new(memory::MemoryAdapter::new());
12  server.resource("/cats", move |req: Request| {
13    let database1 = database.clone();
14    req
15      .and_then(move |req| {
16        database1.handle(req)
17      })
18  });
19  server.listen("127.0.0.1:3000");
20}
examples/4.rs (lines 11-19)
8fn main() {
9  let mut server = Server::new();
10  let database = memory::MemoryAdapter::new();
11  server.resource("/cats", move |req: Request| {
12    database.handle(req).and_then(|mut reply| {
13      {
14          let mut data = reply.data_mut().unwrap();
15          data.insert("example".to_string(), json!("data"));
16      }
17      reply
18    })
19  });
20  server.listen("127.0.0.1:3000");
21}
examples/7.rs (lines 14-28)
8fn main() {
9  let mut server = Server::new();
10  use std::sync::Arc;
11  use std::ops::Deref;
12  let database = Arc::new(memory::MemoryAdapter::new());
13  let chan = Arc::new(memory::MemoryChannel::new());
14  server.resource("/cats", move |req: Request| {
15    let database1 = database.clone();
16    let chan1 = chan.clone();
17    let chan2 = chan.clone();
18    req
19      .and_then(move |req| {
20        match req.method() {
21          Method::Listen => chan1.handle(req),
22          _ => database1.handle(req),
23        }
24      })
25      .and_then(move |reply| {
26        util::send_from_reply(reply, chan2.deref())
27      })
28  });
29  server.listen("127.0.0.1:3000");
30}
examples/6.rs (lines 12-30)
8fn main() {
9  let mut server = Server::new();
10  use std::sync::Arc;
11  let database = Arc::new(memory::MemoryAdapter::new());
12  server.resource("/cats", move |req: Request| {
13    let database1 = database.clone();
14    req
15      .and_then(move |req| {
16        if req.method() == Method::Delete {
17          if let &JsonValue::String(ref password) = req.param("password") {
18            if password != "meow" {
19              return Error::forbidden("incorrect password");
20            }
21          } else {
22            return Error::unauthorized("please provide a password");
23          }
24        }
25        req.boxed()
26      })
27      .and_then(move |req| {
28        database1.handle(req)
29      })
30  });
31  server.listen("127.0.0.1:3000");
32}
Source

pub fn listen<T: Into<String> + Send + 'static>(self, bind_addr: T)

Examples found in repository?
examples/1.rs (line 11)
8fn main() {
9  let mut server = Server::new();
10  // code will be added here
11  server.listen("127.0.0.1:3000");
12}
More examples
Hide additional examples
examples/2.rs (line 13)
8fn main() {
9  let mut server = Server::new();
10  server.resource("/cats", move |req: Request| {
11    Error::server_error("we haven't implemented this yet!")
12  });
13  server.listen("127.0.0.1:3000");
14}
examples/3.rs (line 14)
8fn main() {
9  let mut server = Server::new();
10  let database = memory::MemoryAdapter::new();
11  server.resource("/cats", move |req: Request| {
12    database.handle(req)
13  });
14  server.listen("127.0.0.1:3000");
15}
examples/5.rs (line 19)
8fn main() {
9  let mut server = Server::new();
10  use std::sync::Arc;
11  let database = Arc::new(memory::MemoryAdapter::new());
12  server.resource("/cats", move |req: Request| {
13    let database1 = database.clone();
14    req
15      .and_then(move |req| {
16        database1.handle(req)
17      })
18  });
19  server.listen("127.0.0.1:3000");
20}
examples/4.rs (line 20)
8fn main() {
9  let mut server = Server::new();
10  let database = memory::MemoryAdapter::new();
11  server.resource("/cats", move |req: Request| {
12    database.handle(req).and_then(|mut reply| {
13      {
14          let mut data = reply.data_mut().unwrap();
15          data.insert("example".to_string(), json!("data"));
16      }
17      reply
18    })
19  });
20  server.listen("127.0.0.1:3000");
21}
examples/7.rs (line 29)
8fn main() {
9  let mut server = Server::new();
10  use std::sync::Arc;
11  use std::ops::Deref;
12  let database = Arc::new(memory::MemoryAdapter::new());
13  let chan = Arc::new(memory::MemoryChannel::new());
14  server.resource("/cats", move |req: Request| {
15    let database1 = database.clone();
16    let chan1 = chan.clone();
17    let chan2 = chan.clone();
18    req
19      .and_then(move |req| {
20        match req.method() {
21          Method::Listen => chan1.handle(req),
22          _ => database1.handle(req),
23        }
24      })
25      .and_then(move |reply| {
26        util::send_from_reply(reply, chan2.deref())
27      })
28  });
29  server.listen("127.0.0.1:3000");
30}

Auto Trait Implementations§

§

impl Freeze for Server

§

impl !RefUnwindSafe for Server

§

impl Send for Server

§

impl Sync for Server

§

impl Unpin for Server

§

impl !UnwindSafe for Server

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.