diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-23 04:18:03 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-23 04:18:03 -0500 |
commit | 7e198ba7caecfd98cb25118b403f23545716e21b (patch) | |
tree | 6e1867b36228d2de43bb23bcc306b04e243e53c6 /teleterm/src | |
parent | 989c7f34b30198a87948d37e782f48d771336fa1 (diff) | |
download | teleterm-7e198ba7caecfd98cb25118b403f23545716e21b.tar.gz teleterm-7e198ba7caecfd98cb25118b403f23545716e21b.zip |
add basic template rendering ability
Diffstat (limited to 'teleterm/src')
-rw-r--r-- | teleterm/src/web.rs | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/teleterm/src/web.rs b/teleterm/src/web.rs index 89291c5..c766e38 100644 --- a/teleterm/src/web.rs +++ b/teleterm/src/web.rs @@ -9,8 +9,8 @@ use lazy_static_include::*; use tokio_tungstenite::tungstenite; lazy_static_include::lazy_static_include_bytes!( - INDEX_HTML, - "static/index.html" + INDEX_HTML_TMPL, + "static/index.html.tmpl" ); lazy_static_include::lazy_static_include_bytes!( TELETERM_WEB_JS, @@ -34,14 +34,22 @@ struct WatchQueryParams { id: String, } +#[derive(Clone, serde::Serialize)] +struct TemplateData { + title: String, +} + pub struct Server { server: Box<dyn futures::Future<Item = (), Error = ()> + Send>, } impl Server { pub fn new<T: std::net::ToSocketAddrs + 'static>(addr: T) -> Self { + let data = TemplateData { + title: "teleterm".to_string(), + }; Self { - server: Box::new(gotham::init_server(addr, router())), + server: Box::new(gotham::init_server(addr, router(&data))), } } } @@ -74,9 +82,13 @@ impl futures::Future for Server { } } -pub fn router() -> impl gotham::handler::NewHandler { +fn router(data: &TemplateData) -> impl gotham::handler::NewHandler { gotham::router::builder::build_simple_router(|route| { - route.get("/").to(serve_static("text/html", &INDEX_HTML)); + route.get("/").to_new_handler(serve_template( + "text/html", + &INDEX_HTML_TMPL, + data, + )); route .get("/teleterm_web.js") .to(serve_static("application/javascript", &TELETERM_WEB_JS)); @@ -107,6 +119,30 @@ fn serve_static( } } +fn serve_template( + content_type: &'static str, + s: &'static [u8], + data: &TemplateData, +) -> impl gotham::handler::NewHandler { + let data = data.clone(); + move || { + let data = data.clone(); + Ok(move |state| { + let rendered = handlebars::Handlebars::new() + .render_template( + &String::from_utf8(s.to_vec()).unwrap(), + &data, + ) + .unwrap(); + let response = hyper::Response::builder() + .header("Content-Type", content_type) + .body(hyper::Body::from(rendered)) + .unwrap(); + (state, response) + }) + } +} + fn handle_list( state: gotham::state::State, ) -> (gotham::state::State, hyper::Response<hyper::Body>) { |