From 3e8a6c39881c5867fd72fb2eb9619e2292fe6968 Mon Sep 17 00:00:00 2001
From: Nikolay Kim <fafhrd91@gmail.com>
Date: Mon, 18 Dec 2017 13:41:52 -0800
Subject: [PATCH] add tera example

---
 examples/basic.rs                           |  2 +-
 examples/template_tera/Cargo.toml           | 10 +++++
 examples/template_tera/src/main.rs          | 44 +++++++++++++++++++++
 examples/template_tera/templates/index.html | 17 ++++++++
 examples/template_tera/templates/user.html  | 13 ++++++
 5 files changed, 85 insertions(+), 1 deletion(-)
 create mode 100644 examples/template_tera/Cargo.toml
 create mode 100644 examples/template_tera/src/main.rs
 create mode 100644 examples/template_tera/templates/index.html
 create mode 100644 examples/template_tera/templates/user.html

diff --git a/examples/basic.rs b/examples/basic.rs
index 9c182817..d6b8b3a9 100644
--- a/examples/basic.rs
+++ b/examples/basic.rs
@@ -56,7 +56,7 @@ fn with_param(req: HttpRequest) -> Result<HttpResponse>
 fn main() {
     ::std::env::set_var("RUST_LOG", "actix_web=info");
     let _ = env_logger::init();
-    let sys = actix::System::new("ws-example");
+    let sys = actix::System::new("basic-example");
 
     HttpServer::new(
         || Application::new()
diff --git a/examples/template_tera/Cargo.toml b/examples/template_tera/Cargo.toml
new file mode 100644
index 00000000..b5ce86ca
--- /dev/null
+++ b/examples/template_tera/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "template-tera"
+version = "0.1.0"
+authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
+
+[dependencies]
+env_logger = "0.4"
+actix = "^0.3.1"
+actix-web = { git = "https://github.com/actix/actix-web.git" }
+tera = "*"
diff --git a/examples/template_tera/src/main.rs b/examples/template_tera/src/main.rs
new file mode 100644
index 00000000..97b9d481
--- /dev/null
+++ b/examples/template_tera/src/main.rs
@@ -0,0 +1,44 @@
+extern crate actix;
+extern crate actix_web;
+extern crate env_logger;
+#[macro_use]
+extern crate tera;
+use actix_web::*;
+
+struct State {
+    template: tera::Tera,  // <- store tera template in application state
+}
+
+fn index(req: HttpRequest<State>) -> HttpResponse {
+    let s = if let Some(name) = req.query().get("name") { // <- submitted form
+        let mut ctx = tera::Context::new();
+        ctx.add("name", name);
+        ctx.add("text", &"Welcome!".to_owned());
+        req.state().template.render("user.html", &ctx).unwrap()
+    } else {
+        req.state().template.render("index.html", &tera::Context::new()).unwrap()
+    };
+    httpcodes::HTTPOk.build()
+        .content_type("text/html")
+        .body(s)
+        .unwrap()
+}
+
+fn main() {
+    ::std::env::set_var("RUST_LOG", "actix_web=info");
+    let _ = env_logger::init();
+    let sys = actix::System::new("tera-example");
+
+    HttpServer::new(|| {
+        let tera = compile_templates!(concat!(env!("CARGO_MANIFEST_DIR"), "/templates/**/*"));
+
+        Application::with_state(State{template: tera})
+            // enable logger
+            .middleware(middlewares::Logger::default())
+            .resource("/", |r| r.method(Method::GET).f(index))})
+        .bind("127.0.0.1:8080").unwrap()
+        .start().unwrap();
+
+    println!("Started http server: 127.0.0.1:8080");
+    let _ = sys.run();
+}
diff --git a/examples/template_tera/templates/index.html b/examples/template_tera/templates/index.html
new file mode 100644
index 00000000..d8a47bc0
--- /dev/null
+++ b/examples/template_tera/templates/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8" />
+  <title>Actix web</title>
+</head>
+<body>
+  <h1>Welcome!</h1>
+  <p>
+    <h3>What is your name?</h3>
+    <form>
+      <input type="text" name="name" /><br/>
+      <p><input type="submit"></p>
+    </form>
+  </p>
+</body>
+</html>
diff --git a/examples/template_tera/templates/user.html b/examples/template_tera/templates/user.html
new file mode 100644
index 00000000..cb532891
--- /dev/null
+++ b/examples/template_tera/templates/user.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8" />
+  <title>Actix web</title>
+</head>
+<body>
+  <h1>Hi, {{ name }}!</h1>
+  <p>
+    {{ text }}
+  </p>
+</body>
+</html>