diff --git a/src/main.rs b/src/main.rs index d748be64f..72bc5e00e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,11 +27,12 @@ extern crate serde_json; extern crate url; extern crate url_serde; -pub mod oidc; pub mod db; pub mod errors; pub mod handlers; pub mod models; +pub mod oidc; +pub mod render; pub mod schema; use actix::prelude::*; diff --git a/src/render.rs b/src/render.rs new file mode 100644 index 000000000..8dfce219b --- /dev/null +++ b/src/render.rs @@ -0,0 +1,70 @@ +//! This module defines a rendering actor used for processing Converse +//! data into whatever format is needed by the templates and rendering +//! them. + +use actix::prelude::*; +use actix_web::HttpResponse; +use tera::{Context, Tera}; +use models::*; +use errors::*; + +pub struct Renderer(pub Tera); + +impl Actor for Renderer { + type Context = actix::Context; +} + +/// Message used to render the index page. +pub struct IndexPage { + pub threads: Vec, +} + +impl Message for IndexPage { + type Result = Result; +} + +impl Handler for Renderer { + type Result = Result; + + fn handle(&mut self, msg: IndexPage, _: &mut Self::Context) -> Self::Result { + let mut ctx = Context::new(); + ctx.add("threads", &msg.threads); + Ok(self.0.render("index.html", &ctx)?) + } +} + +/// Message used to render a thread. +pub struct ThreadPage { + pub thread: Thread, + pub posts: Vec, +} + +impl Message for ThreadPage { + type Result = Result; +} + +impl Handler for Renderer { + type Result = Result; + + fn handle(&mut self, msg: ThreadPage, _: &mut Self::Context) -> Self::Result { + let mut ctx = Context::new(); + ctx.add("thread", &msg.thread); + ctx.add("posts", &msg.posts); + Ok(self.0.render("thread.html", &ctx)?) + } +} + +/// Message used to render new thread page. +pub struct NewThreadPage; + +impl Message for NewThreadPage { + type Result = Result; +} + +impl Handler for Renderer { + type Result = Result; + + fn handle(&mut self, _: NewThreadPage, _: &mut Self::Context) -> Self::Result { + Ok(self.0.render("new-thread.html", &Context::new())?) + } +}