feat(render): Add rendering actor
Adds a separate actor that handles page rendering, templating engine state and other related topics.
This commit is contained in:
parent
4eb0a57177
commit
fe7e5e48b5
2 changed files with 72 additions and 1 deletions
|
@ -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::*;
|
||||
|
|
70
src/render.rs
Normal file
70
src/render.rs
Normal file
|
@ -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<Self>;
|
||||
}
|
||||
|
||||
/// Message used to render the index page.
|
||||
pub struct IndexPage {
|
||||
pub threads: Vec<Thread>,
|
||||
}
|
||||
|
||||
impl Message for IndexPage {
|
||||
type Result = Result<String>;
|
||||
}
|
||||
|
||||
impl Handler<IndexPage> for Renderer {
|
||||
type Result = Result<String>;
|
||||
|
||||
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<Post>,
|
||||
}
|
||||
|
||||
impl Message for ThreadPage {
|
||||
type Result = Result<String>;
|
||||
}
|
||||
|
||||
impl Handler<ThreadPage> for Renderer {
|
||||
type Result = Result<String>;
|
||||
|
||||
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<String>;
|
||||
}
|
||||
|
||||
impl Handler<NewThreadPage> for Renderer {
|
||||
type Result = Result<String>;
|
||||
|
||||
fn handle(&mut self, _: NewThreadPage, _: &mut Self::Context) -> Self::Result {
|
||||
Ok(self.0.render("new-thread.html", &Context::new())?)
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue