diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 64 |
1 files changed, 3 insertions, 61 deletions
diff --git a/src/main.rs b/src/main.rs index 3590975c8e9f..8ce4e1082e4e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,74 +21,16 @@ extern crate serde; pub mod schema; pub mod models; pub mod db; +pub mod handlers; use actix::prelude::*; use actix_web::*; use actix_web::http::Method; - +use db::*; use diesel::pg::PgConnection; use diesel::r2d2::{ConnectionManager, Pool}; use std::env; -use db::*; -use futures::Future; -use models::*; - -/// Represents the state carried by the web server actors. -struct AppState { - /// Address of the database actor - db: Addr<Syn, DbExecutor>, - - /// Compiled templates - tera: tera::Tera, -} - -/// Really inefficient renderer example! -fn render_threads(tpl: &tera::Tera, threads: Vec<Thread>) -> String { - let mut ctx = tera::Context::new(); - ctx.add("threads", &threads); - tpl.render("index.html", &ctx).expect("Oh no") -} - -fn forum_index(state: State<AppState>) -> FutureResponse<HttpResponse> { - state.db.send(ListThreads) - .from_err() - .and_then(move |res| match res { - Ok(threads) => Ok(HttpResponse::Ok() - .content_type("text/html") - .body(render_threads(&state.tera, threads))), - Err(err) => { - error!("Error loading threads: {}", err); - Ok(HttpResponse::InternalServerError().into()) - } - }) - .responder() -} - -fn render_thread(tpl: &tera::Tera, thread: Thread, posts: Vec<Post>) -> HttpResponse { - let mut ctx = tera::Context::new(); - ctx.add("thread", &thread); - ctx.add("posts", &posts); - - let body = tpl.render("thread.html", &ctx).expect("Oh no"); - HttpResponse::Ok() - .content_type("text/html") - .body(body) -} - -fn forum_thread(state: State<AppState>, thread_id: Path<i32>) - -> FutureResponse<HttpResponse> { - let id = thread_id.into_inner(); - state.db.send(GetThread(id)) - .from_err() - .and_then(move |res| match res { - Ok((thread, posts)) => Ok(render_thread(&state.tera, thread, posts)), - Err(err) => { - error!("Error loading thread {}: {}", id, err); - Ok(HttpResponse::InternalServerError().into()) - } - }) - .responder() -} +use handlers::*; fn main() { env_logger::init(); |