-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain.rs
70 lines (57 loc) · 2 KB
/
main.rs
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
70
#[macro_use]
extern crate rustc_serialize;
extern crate unicase;
extern crate mount;
extern crate bodyparser;
extern crate uuid;
extern crate iron;
extern crate router;
mod repository;
mod todo;
mod handlers;
use std::sync::Arc;
use std::env;
use std::str::FromStr;
use iron::headers;
use iron::method::Method::*;
use iron::prelude::*;
use iron::AfterMiddleware;
use mount::Mount;
use router::Router;
use unicase::UniCase;
use ::handlers::*;
use repository::Repository;
use todo::Todo;
struct CORS;
impl AfterMiddleware for CORS {
fn after(&self, _: &mut Request, mut res: Response) -> IronResult<Response> {
res.headers.set(headers::AccessControlAllowOrigin::Any);
res.headers.set(headers::AccessControlAllowHeaders(
vec![
UniCase("accept".to_string()),
UniCase("content-type".to_string())
]));
res.headers.set(headers::AccessControlAllowMethods(
vec![Get,Head,Post,Delete,Options,Put,Patch]));
Ok(res)
}
}
fn main() {
let mut router = Router::new();
let repository: Arc<Repository<Todo>> = Arc::new(Repository::new());
router.get("/todos", GETTodosHandler::new(repository.clone()), "get_todos");
router.post("/todos", POSTTodosHandler::new(repository.clone()), "create_todos");
router.delete("/todos", DELETETodosHandler::new(repository.clone()), "delete_todos");
router.get("/todos/:id", GETTodoHandler::new(repository.clone()), "get_todo");
router.patch("/todos/:id", PATCHTodoHandler::new(repository.clone()), "update_todo");
router.delete("/todos/:id", DELETETodoHandler::new(repository.clone()), "delete_todo");
let mut mount = Mount::new();
mount.mount("/", router);
let mut chain = Chain::new(mount);
chain.link_after(CORS);
fn get_server_port() -> u16 {
let port_str = env::var("PORT").unwrap_or(String::new());
FromStr::from_str(&port_str).unwrap_or(8080)
}
Iron::new(chain).http(("0.0.0.0", get_server_port())).unwrap();
}