diff --git a/Cargo.lock b/Cargo.lock index fb83a19..076fbfa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1163,12 +1163,24 @@ dependencies = [ "kernel32-sys", "libc", "log", - "miow", + "miow 0.2.2", "net2", "slab", "winapi 0.2.8", ] +[[package]] +name = "mio-named-pipes" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656" +dependencies = [ + "log", + "mio", + "miow 0.3.6", + "winapi 0.3.9", +] + [[package]] name = "mio-uds" version = "0.6.8" @@ -1192,6 +1204,16 @@ dependencies = [ "ws2_32-sys", ] +[[package]] +name = "miow" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" +dependencies = [ + "socket2", + "winapi 0.3.9", +] + [[package]] name = "net2" version = "0.2.37" @@ -1947,19 +1969,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092" dependencies = [ "bytes 0.5.6", + "fnv", "futures-core", "iovec", "lazy_static", "libc", "memchr", "mio", + "mio-named-pipes", "mio-uds", + "num_cpus", "pin-project-lite 0.1.11", "signal-hook-registry", "slab", + "tokio-macros", "winapi 0.3.9", ] +[[package]] +name = "tokio-macros" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tokio-util" version = "0.3.1" @@ -2346,4 +2383,5 @@ dependencies = [ "parking_lot", "simple-logging", "tera", + "tokio", ] diff --git a/yopa-web/Cargo.toml b/yopa-web/Cargo.toml index f837ee0..d98a727 100644 --- a/yopa-web/Cargo.toml +++ b/yopa-web/Cargo.toml @@ -17,5 +17,7 @@ tera = "1.6.1" actix-web-static-files = "3.0" lazy_static = "1.4.0" +tokio = { version="0.2.6", features=["full"] } + [build-dependencies] actix-web-static-files = "3.0" diff --git a/yopa-web/resources/templates/index.html.tera b/yopa-web/resources/templates/index.html.tera index 0d82ac5..d9114f9 100644 --- a/yopa-web/resources/templates/index.html.tera +++ b/yopa-web/resources/templates/index.html.tera @@ -12,6 +12,4 @@

Welcome to tera on actix

- Number of visits: {{visits}} - {%- endblock %} diff --git a/yopa-web/src/main.rs b/yopa-web/src/main.rs index 2907d21..9663d7e 100644 --- a/yopa-web/src/main.rs +++ b/yopa-web/src/main.rs @@ -12,6 +12,7 @@ use tera::Tera; use include_dir::Dir; use std::sync::Arc; use log::LevelFilter; +use crate::tera_ext::TeraExt; mod tera_ext; @@ -24,29 +25,19 @@ static TEMPLATES: include_dir::Dir = include_dir::include_dir!("./resources/temp lazy_static! { static ref TERA : Tera = { let mut tera = Tera::default(); - tera_ext::tera_includedir_walk_folder(&mut tera, &TEMPLATES); + tera.add_include_dir_templates(&TEMPLATES); tera }; } -struct VisitCounter { - pub counter : AtomicUsize, -} - -impl VisitCounter { - pub fn count_visit(&self) -> usize { - self.counter.fetch_add(1, Ordering::Relaxed) - } -} - #[get("/")] -async fn service_index(req: HttpRequest, visits : web::Data) -> actix_web::Result { +async fn service_index(req: HttpRequest) -> actix_web::Result { let mut context = tera::Context::new(); - context.insert("visits", &visits.count_visit()); let html = TERA.render("index", &context).map_err(|e| { actix_web::error::ErrorInternalServerError(e) })?; + Ok(HttpResponse::Ok().body(html)) } @@ -54,14 +45,11 @@ async fn service_index(req: HttpRequest, visits : web::Data) -> ac async fn main() -> std::io::Result<()> { simple_logging::log_to_stderr(LevelFilter::Debug); - let counter = web::Data::new(VisitCounter { counter : Default::default() }); - HttpServer::new(move || { let static_files = actix_web_static_files::ResourceFiles::new("/static", included_static_files()) .do_not_resolve_defaults(); App::new() - .app_data(counter.clone()) .service(service_index) .service(static_files) }) diff --git a/yopa-web/src/tera_ext.rs b/yopa-web/src/tera_ext.rs index 724230c..8cf1495 100644 --- a/yopa-web/src/tera_ext.rs +++ b/yopa-web/src/tera_ext.rs @@ -1,20 +1,16 @@ use tera::Tera; use include_dir::Dir; -/// Add templates from include_dir!() to Tera -pub(crate) fn tera_includedir_walk_folder(tera : &mut Tera, dir: &Dir) { - let mut templates = vec![]; - tera_includedir_walk_folder_inner(&mut templates, tera, dir); - tera.add_raw_templates(templates); -} - fn tera_includedir_walk_folder_inner(collected : &mut Vec<(String, String)>, tera : &mut Tera, dir: &Dir) { for f in dir.files() { - if f.path().extension().unwrap_or_default() != "tera" { + let halves : Vec<_> = f.path().file_name().unwrap().to_str().unwrap().split('.').collect(); + + if halves.last().unwrap() != &"tera" { + debug!("Bad file: {:?}", f); continue; } - let name = f.path().file_stem().unwrap().to_str().unwrap().split('.').nth(0).unwrap(); + let name = halves.first().unwrap(); let content = f.contents_utf8().unwrap(); let p = f.path().parent().unwrap().join(name); @@ -28,3 +24,16 @@ fn tera_includedir_walk_folder_inner(collected : &mut Vec<(String, String)>, ter tera_includedir_walk_folder_inner(collected, tera, subdir) } } + +pub(crate) trait TeraExt { + fn add_include_dir_templates(&mut self, dir: &Dir) -> tera::Result<()>; +} + +impl TeraExt for Tera { + fn add_include_dir_templates(&mut self, dir: &Dir) -> tera::Result<()> { + debug!("Walk dir: {:?}", dir); + let mut templates = vec![]; + tera_includedir_walk_folder_inner(&mut templates, self, dir); + self.add_raw_templates(templates) + } +}