Browse Source

use different template engine (#3655)

Nikolay Kim 7 years ago
parent
commit
c203171b5c

+ 89 - 90
frameworks/Rust/actix/Cargo.lock

@@ -1,31 +1,32 @@
 [[package]]
 [[package]]
 name = "actix"
 name = "actix"
-version = "0.4.0"
+version = "0.4.1"
 dependencies = [
 dependencies = [
- "actix 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-web 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "askama 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-web 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "askama 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "diesel 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "diesel 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
+ "horrorshow 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "http 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "http 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "postgres 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "postgres 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-io 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-io 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "actix"
 name = "actix"
-version = "0.5.5"
+version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "actix_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "actix_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "crossbeam-channel 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "crossbeam-channel 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -33,22 +34,22 @@ dependencies = [
  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "skeptic 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "skeptic 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-io 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-io 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-signal 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-signal 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "trust-dns-resolver 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "trust-dns-resolver 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "uuid 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "uuid 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "actix-web"
 name = "actix-web"
-version = "0.5.2"
+version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "actix 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -58,7 +59,7 @@ dependencies = [
  "flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "h2 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "h2 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "http 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "http 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "http-range 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "http-range 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -74,15 +75,14 @@ dependencies = [
  "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_urlencoded 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_urlencoded 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-io 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-io 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "trust-dns-resolver 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
@@ -121,27 +121,27 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "askama"
 name = "askama"
-version = "0.6.1"
+version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "askama_derive 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "askama_shared 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "askama_derive 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "askama_shared 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "askama_derive"
 name = "askama_derive"
-version = "0.6.1"
+version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "askama_shared 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "askama_shared 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "askama_shared"
 name = "askama_shared"
-version = "0.6.1"
+version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -178,7 +178,7 @@ name = "backtrace-sys"
 version = "0.1.16"
 version = "0.1.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
@@ -193,7 +193,7 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "base64"
 name = "base64"
-version = "0.9.0"
+version = "0.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -207,7 +207,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 
 [[package]]
 [[package]]
 name = "bitflags"
 name = "bitflags"
-version = "1.0.1"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 
 [[package]]
 [[package]]
@@ -224,7 +224,7 @@ name = "brotli-sys"
 version = "0.3.2"
 version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
@@ -268,14 +268,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "semver 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "semver 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "cc"
 name = "cc"
-version = "1.0.10"
+version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 
 [[package]]
 [[package]]
@@ -376,7 +376,7 @@ name = "diesel"
 version = "1.2.2"
 version = "1.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "diesel_derives 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "diesel_derives 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "pq-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "pq-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -534,7 +534,7 @@ name = "fuchsia-zircon"
 version = "0.3.3"
 version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
@@ -577,7 +577,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 
 [[package]]
 [[package]]
 name = "h2"
 name = "h2"
-version = "0.1.5"
+version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -606,6 +606,11 @@ dependencies = [
  "digest 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "digest 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
+[[package]]
+name = "horrorshow"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
 [[package]]
 [[package]]
 name = "hostname"
 name = "hostname"
 version = "0.1.4"
 version = "0.1.4"
@@ -664,7 +669,7 @@ version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "error-chain 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "error-chain 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "socket2 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "socket2 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "widestring 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "widestring 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "winreg 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "winreg 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -795,7 +800,7 @@ name = "miniz-sys"
 version = "0.1.10"
 version = "0.1.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
@@ -860,11 +865,6 @@ dependencies = [
  "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
-[[package]]
-name = "num-traits"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 [[package]]
 name = "num_cpus"
 name = "num_cpus"
 version = "1.8.0"
 version = "1.8.0"
@@ -897,7 +897,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
@@ -951,7 +951,7 @@ dependencies = [
  "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "postgres-protocol 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "postgres-protocol 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "postgres-shared 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "postgres-shared 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "socket2 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "socket2 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -1001,7 +1001,7 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "proc-macro2"
 name = "proc-macro2"
-version = "0.3.6"
+version = "0.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1035,10 +1035,10 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "quote"
 name = "quote"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -1108,7 +1108,7 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "remove_dir_all"
 name = "remove_dir_all"
-version = "0.5.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1170,7 +1170,7 @@ version = "0.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -1180,16 +1180,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 
 [[package]]
 [[package]]
 name = "serde"
 name = "serde"
-version = "1.0.38"
+version = "1.0.43"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 
 [[package]]
 [[package]]
 name = "serde_derive"
 name = "serde_derive"
-version = "1.0.38"
+version = "1.0.43"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive_internals 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive_internals 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
@@ -1199,19 +1199,18 @@ name = "serde_derive_internals"
 version = "0.23.1"
 version = "0.23.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "serde_json"
 name = "serde_json"
-version = "1.0.14"
+version = "1.0.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -1221,7 +1220,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
@@ -1256,7 +1255,7 @@ dependencies = [
  "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "pulldown-cmark 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "pulldown-cmark 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)",
  "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
@@ -1268,12 +1267,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 
 [[package]]
 [[package]]
 name = "smallvec"
 name = "smallvec"
-version = "0.6.0"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 
 [[package]]
 [[package]]
 name = "socket2"
 name = "socket2"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1325,8 +1324,8 @@ name = "syn"
 version = "0.13.1"
 version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
- "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
@@ -1353,7 +1352,7 @@ version = "0.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "remove_dir_all 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -1416,7 +1415,7 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "trust-dns-proto"
 name = "trust-dns-proto"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1433,7 +1432,7 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "trust-dns-resolver"
 name = "trust-dns-resolver"
-version = "0.8.1"
+version = "0.8.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 dependencies = [
  "error-chain 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "error-chain 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1444,7 +1443,7 @@ dependencies = [
  "lru-cache 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "lru-cache 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "resolv-conf 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "resolv-conf 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "trust-dns-proto 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "trust-dns-proto 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -1619,22 +1618,22 @@ dependencies = [
 ]
 ]
 
 
 [metadata]
 [metadata]
-"checksum actix 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "29d85dc76d055498ef65ecf556df154393f94f55d325a05be20c676432536ce7"
-"checksum actix-web 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ccbfb9207f6628f4861b5da267dd802731b8310dab722749761052f294e4494c"
+"checksum actix 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e767e3170dc7cdec50fe1b74d22fd9d2f4b78b97b2052a254b5acb07dae68634"
+"checksum actix-web 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ebda1eae1638d03af2fc27a7d57c5fd035901a949f548d7c72ff5e07f5052d9f"
 "checksum actix_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c4b1dc922654b9aca7a8a31eab875fde804fa9fbd67f220f2e457787b23590f2"
 "checksum actix_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c4b1dc922654b9aca7a8a31eab875fde804fa9fbd67f220f2e457787b23590f2"
 "checksum aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d6531d44de723825aa81398a6415283229725a00fa30713812ab9323faa82fc4"
 "checksum aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d6531d44de723825aa81398a6415283229725a00fa30713812ab9323faa82fc4"
 "checksum arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0fd1479b7c29641adbd35ff3b5c293922d696a92f25c8c975da3e0acbc87258f"
 "checksum arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0fd1479b7c29641adbd35ff3b5c293922d696a92f25c8c975da3e0acbc87258f"
 "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef"
 "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef"
-"checksum askama 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "59de9ed5a107940d4f4e3230bf4125c08479029d25ce9bd8f494d7664f97e246"
-"checksum askama_derive 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2e667ffc6130c85fddc7cfabe30a7305184988d89dcef173145a0f2395fb2107"
-"checksum askama_shared 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab231846f7f9fd8ed036e411e2b43e0de0c29033ef09d109f2e7224d17113e43"
+"checksum askama 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "707738cab2be4ebcdf586d9ae53eceb3fc39b7fbefb77f53d74199038c45a768"
+"checksum askama_derive 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2c44f7839000b63cca24c49dd7ef4ca542600a406dca4130dadf832780adcdcf"
+"checksum askama_shared 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "72764966f241ed1143792ec29805df7eec322800b2b402781d86339e66f512b6"
 "checksum backtrace 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "346d7644f0b5f9bc73082d3b2236b69a05fd35cce0cfa3724e184e6a5c9e2a2f"
 "checksum backtrace 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "346d7644f0b5f9bc73082d3b2236b69a05fd35cce0cfa3724e184e6a5c9e2a2f"
 "checksum backtrace 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ebbe525f66f42d207968308ee86bc2dd60aa5fab535b22e616323a173d097d8e"
 "checksum backtrace 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ebbe525f66f42d207968308ee86bc2dd60aa5fab535b22e616323a173d097d8e"
 "checksum backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "44585761d6161b0f57afc49482ab6bd067e4edef48c12a152c237eb0203f7661"
 "checksum backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "44585761d6161b0f57afc49482ab6bd067e4edef48c12a152c237eb0203f7661"
 "checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9"
 "checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9"
-"checksum base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "229d032f1a99302697f10b27167ae6d03d49d032e6a8e2550e8d3fc13356d2b4"
+"checksum base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9263aa6a38da271eec5c91a83ce1e800f093c8535788d403d626d8d5c3f8f007"
 "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5"
 "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5"
-"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf"
+"checksum bitflags 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1b2bf7093258c32e0825b635948de528a5949799dcd61bef39534c8aab95870c"
 "checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab"
 "checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab"
 "checksum brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd"
 "checksum brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd"
 "checksum brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e"
 "checksum brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e"
@@ -1643,7 +1642,7 @@ dependencies = [
 "checksum byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "73b5bdfe7ee3ad0b99c9801d58807a9dbc9e09196365b0203853b99889ab3c87"
 "checksum byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "73b5bdfe7ee3ad0b99c9801d58807a9dbc9e09196365b0203853b99889ab3c87"
 "checksum bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b7db437d718977f6dc9b2e3fd6fc343c02ac6b899b73fdd2179163447bd9ce9"
 "checksum bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b7db437d718977f6dc9b2e3fd6fc343c02ac6b899b73fdd2179163447bd9ce9"
 "checksum cargo_metadata 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1f56ec3e469bca7c276f2eea015aa05c5e381356febdbb0683c2580189604537"
 "checksum cargo_metadata 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1f56ec3e469bca7c276f2eea015aa05c5e381356febdbb0683c2580189604537"
-"checksum cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8b9d2900f78631a5876dc5d6c9033ede027253efcd33dd36b1309fc6cab97ee0"
+"checksum cc 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)" = "a9b90658a0d04c19acb58f07c9076948d3a716db1039674430c94e4aec88de20"
 "checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
 "checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
 "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e"
 "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e"
 "checksum cookie 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "746858cae4eae40fff37e1998320068df317bc247dc91a67c6cfa053afdc2abb"
 "checksum cookie 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "746858cae4eae40fff37e1998320068df317bc247dc91a67c6cfa053afdc2abb"
@@ -1681,9 +1680,10 @@ dependencies = [
 "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb"
 "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb"
 "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d"
 "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d"
 "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
 "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
-"checksum h2 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "065fb096fc65bbfb9c765d48c9f3f1a21cdb25ba0d3f82105b38f30ddffa2f7e"
+"checksum h2 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c91a0ee01fcf961ae004d88f1a77fc47dc5db6164f7d57605cc9f2c93d535686"
 "checksum hex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d6a22814455d41612f41161581c2883c0c6a1c41852729b17d5ed88f01e153aa"
 "checksum hex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d6a22814455d41612f41161581c2883c0c6a1c41852729b17d5ed88f01e153aa"
 "checksum hmac 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44f3bdb08579d99d7dc761c0e266f13b5f2ab8c8c703b9fc9ef333cd8f48f55e"
 "checksum hmac 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44f3bdb08579d99d7dc761c0e266f13b5f2ab8c8c703b9fc9ef333cd8f48f55e"
+"checksum horrorshow 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c35960dd5c0f7cedf431b0401db9863f49dd4837aa7d6c99279ddf3a87b68f9c"
 "checksum hostname 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "58fab6e177434b0bb4cd344a4dabaa5bd6d7a8d792b1885aebcae7af1091d1cb"
 "checksum hostname 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "58fab6e177434b0bb4cd344a4dabaa5bd6d7a8d792b1885aebcae7af1091d1cb"
 "checksum http 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "75df369fd52c60635208a4d3e694777c099569b3dcf4844df8f652dc004644ab"
 "checksum http 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "75df369fd52c60635208a4d3e694777c099569b3dcf4844df8f652dc004644ab"
 "checksum http-range 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2e4003e6fd05ea9109db00415e670b11f511a42e567ff2d5d771cbdfa24e02"
 "checksum http-range 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2e4003e6fd05ea9109db00415e670b11f511a42e567ff2d5d771cbdfa24e02"
@@ -1718,7 +1718,6 @@ dependencies = [
 "checksum net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)" = "9044faf1413a1057267be51b5afba8eb1090bd2231c693664aa1db716fe1eae0"
 "checksum net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)" = "9044faf1413a1057267be51b5afba8eb1090bd2231c693664aa1db716fe1eae0"
 "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2"
 "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2"
 "checksum nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05aec50c70fd288702bcd93284a8444607f3292dbdf2a30de5ea5dcdbe72287b"
 "checksum nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05aec50c70fd288702bcd93284a8444607f3292dbdf2a30de5ea5dcdbe72287b"
-"checksum num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dee092fcdf725aee04dd7da1d21debff559237d49ef1cb3e69bcb8ece44c7364"
 "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30"
 "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30"
 "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37"
 "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37"
 "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e"
 "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e"
@@ -1733,12 +1732,12 @@ dependencies = [
 "checksum postgres-shared 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bafecadf25b7de9a5f747e93073db444c9ddcc7b3ae37bcdf63c2508f9a17f2d"
 "checksum postgres-shared 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bafecadf25b7de9a5f747e93073db444c9ddcc7b3ae37bcdf63c2508f9a17f2d"
 "checksum pq-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4dfb5e575ef93a1b7b2a381d47ba7c5d4e4f73bff37cee932195de769aad9a54"
 "checksum pq-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4dfb5e575ef93a1b7b2a381d47ba7c5d4e4f73bff37cee932195de769aad9a54"
 "checksum proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0"
 "checksum proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0"
-"checksum proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "49b6a521dc81b643e9a51e0d1cf05df46d5a2f3c0280ea72bcb68276ba64a118"
+"checksum proc-macro2 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b16749538926f394755373f0dfec0852d79b3bd512a5906ceaeb72ee64a4eaa0"
 "checksum pulldown-cmark 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d6fdf85cda6cadfae5428a54661d431330b312bc767ddbc57adbedc24da66e32"
 "checksum pulldown-cmark 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d6fdf85cda6cadfae5428a54661d431330b312bc767ddbc57adbedc24da66e32"
 "checksum quick-error 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eda5fe9b71976e62bc81b781206aaa076401769b2143379d3eb2118388babac4"
 "checksum quick-error 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eda5fe9b71976e62bc81b781206aaa076401769b2143379d3eb2118388babac4"
 "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
 "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
 "checksum quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1eca14c727ad12702eb4b6bfb5a232287dcf8385cb8ca83a3eeaf6519c44c408"
 "checksum quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1eca14c727ad12702eb4b6bfb5a232287dcf8385cb8ca83a3eeaf6519c44c408"
-"checksum quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0ff51282f28dc1b53fd154298feaa2e77c5ea0dba68e1fd8b03b72fbe13d2a"
+"checksum quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8"
 "checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1"
 "checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1"
 "checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5"
 "checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5"
 "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8"
 "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8"
@@ -1746,7 +1745,7 @@ dependencies = [
 "checksum redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd"
 "checksum redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd"
 "checksum regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "aec3f58d903a7d2a9dc2bf0e41a746f4530e0cab6b615494e058f67a3ef947fb"
 "checksum regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "aec3f58d903a7d2a9dc2bf0e41a746f4530e0cab6b615494e058f67a3ef947fb"
 "checksum regex-syntax 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bd90079345f4a4c3409214734ae220fd773c6f2e8a543d07370c6c1c369cfbfb"
 "checksum regex-syntax 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bd90079345f4a4c3409214734ae220fd773c6f2e8a543d07370c6c1c369cfbfb"
-"checksum remove_dir_all 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfc5b3ce5d5ea144bb04ebd093a9e14e9765bcfec866aecda9b6dec43b3d1e24"
+"checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5"
 "checksum resolv-conf 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e1b086bb6a2659d6ba66e4aa21bde8a53ec03587cd5c80b83bdc3a330f35cab"
 "checksum resolv-conf 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e1b086bb6a2659d6ba66e4aa21bde8a53ec03587cd5c80b83bdc3a330f35cab"
 "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c"
 "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c"
 "checksum rustc-demangle 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "11fb43a206a04116ffd7cfcf9bcb941f8eb6cc7ff667272246b0a1c74259a3cb"
 "checksum rustc-demangle 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "11fb43a206a04116ffd7cfcf9bcb941f8eb6cc7ff667272246b0a1c74259a3cb"
@@ -1756,18 +1755,18 @@ dependencies = [
 "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
 "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
 "checksum semver 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bee2bc909ab2d8d60dab26e8cad85b25d795b14603a0dcb627b78b9d30b6454b"
 "checksum semver 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bee2bc909ab2d8d60dab26e8cad85b25d795b14603a0dcb627b78b9d30b6454b"
 "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
 "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-"checksum serde 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)" = "4c36359ac1a823e00db02a243376ced650f088dc1f6259bbf828e4668e3c7399"
-"checksum serde_derive 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)" = "f0477feff739386f5bca8e13fa43d96a4e834904d538f503906c8179f9205f50"
+"checksum serde 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)" = "0c855d888276f20d140223bd06515e5bf1647fd6d02593cb5792466d9a8ec2d0"
+"checksum serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)" = "aa113e5fc4b008a626ba2bbd41330b56c9987d667f79f7b243e5a2d03d91ed1c"
 "checksum serde_derive_internals 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9d30c4596450fd7bbda79ef15559683f9a79ac0193ea819db90000d7e1cae794"
 "checksum serde_derive_internals 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9d30c4596450fd7bbda79ef15559683f9a79ac0193ea819db90000d7e1cae794"
-"checksum serde_json 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "8f6f1f77b969caa064f347544d703efacaf4854b84831096a5dc206a8aedbc27"
+"checksum serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "8c6c4e049dc657a99e394bd85c22acbf97356feeec6dbf44150f2dcf79fb3118"
 "checksum serde_urlencoded 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce0fd303af908732989354c6f02e05e2e6d597152870f2c6990efb0577137480"
 "checksum serde_urlencoded 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce0fd303af908732989354c6f02e05e2e6d597152870f2c6990efb0577137480"
 "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
 "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
 "checksum sha2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7daca11f2fdb8559c4f6c588386bed5e2ad4b6605c1442935a7f08144a918688"
 "checksum sha2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7daca11f2fdb8559c4f6c588386bed5e2ad4b6605c1442935a7f08144a918688"
 "checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537"
 "checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537"
 "checksum skeptic 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c8431f8fca168e2db4be547bd8329eac70d095dff1444fee4b0fa0fabc7df75a"
 "checksum skeptic 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c8431f8fca168e2db4be547bd8329eac70d095dff1444fee4b0fa0fabc7df75a"
 "checksum slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdeff4cd9ecff59ec7e3744cbca73dfe5ac35c2aedb2cfba8a1c715a18912e9d"
 "checksum slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdeff4cd9ecff59ec7e3744cbca73dfe5ac35c2aedb2cfba8a1c715a18912e9d"
-"checksum smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44db0ecb22921ef790d17ae13a3f6d15784183ff5f2a01aa32098c7498d2b4b9"
-"checksum socket2 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "71ebbe82fcdd697244ba7fe6e05e63b5c45910c3927e28469a04947494ff48d8"
+"checksum smallvec 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03dab98ab5ded3a8b43b2c80751194608d0b2aa0f1d46cf95d1c35e192844aa7"
+"checksum socket2 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ff606e0486e88f5fc6cfeb3966e434fb409abbc7a3ab495238f70a1ca97f789d"
 "checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b"
 "checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b"
 "checksum string 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "31f98b200e7caca9efca50fc0aa69cd58a5ec81d5f6e75b2f3ecaad2e998972a"
 "checksum string 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "31f98b200e7caca9efca50fc0aa69cd58a5ec81d5f6e75b2f3ecaad2e998972a"
 "checksum stringprep 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1"
 "checksum stringprep 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1"
@@ -1782,8 +1781,8 @@ dependencies = [
 "checksum tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "52b4e32d8edbf29501aabb3570f027c6ceb00ccef6538f4bddba0200503e74e8"
 "checksum tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "52b4e32d8edbf29501aabb3570f027c6ceb00ccef6538f4bddba0200503e74e8"
 "checksum tokio-io 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b9532748772222bf70297ec0e2ad0f17213b4a7dd0e6afb68e0a0768f69f4e4f"
 "checksum tokio-io 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b9532748772222bf70297ec0e2ad0f17213b4a7dd0e6afb68e0a0768f69f4e4f"
 "checksum tokio-signal 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e8f46863230f9a05cf52d173721ec391b9c5782a2465f593029922b8782b9ffe"
 "checksum tokio-signal 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e8f46863230f9a05cf52d173721ec391b9c5782a2465f593029922b8782b9ffe"
-"checksum trust-dns-proto 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0266cdf22b1f3904d21252e71079395bc47836513d4f3888ff85b57a6add2227"
-"checksum trust-dns-resolver 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "87cff716794d5ab064957bb78fc5575a38337571917ddd86fc2fed52dc48b141"
+"checksum trust-dns-proto 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cbbddb93547eeee847367d8f59b68002294a7b4df31c143fbee4109ce0c61a04"
+"checksum trust-dns-resolver 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9b0a0c9d4f8dd56481209c5ae1a8965ed022461d352c81fb92466ec9d846929e"
 "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169"
 "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169"
 "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d"
 "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d"
 "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33"
 "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33"

+ 2 - 5
frameworks/Rust/actix/Cargo.toml

@@ -1,7 +1,6 @@
 [package]
 [package]
 name = "actix"
 name = "actix"
-version = "0.4.0"
-build = "build.rs"
+version = "0.4.1"
 
 
 [[bin]]
 [[bin]]
 name = "actix"
 name = "actix"
@@ -29,13 +28,11 @@ tokio-core = "=0.1.12"
 http = "0.1"
 http = "0.1"
 diesel = { version = "1.2", features = ["postgres"] }
 diesel = { version = "1.2", features = ["postgres"] }
 postgres = "0.15"
 postgres = "0.15"
+horrorshow = "0.6"
 
 
 actix = "0.5"
 actix = "0.5"
 actix-web = "^0.5"
 actix-web = "^0.5"
 
 
-[build-dependencies]
-askama = "0.6"
-
 [profile.release]
 [profile.release]
 lto = true
 lto = true
 opt-level = 3
 opt-level = 3

+ 5 - 4
frameworks/Rust/actix/README.md

@@ -1,11 +1,12 @@
-# [Actix](https://github.com/actix/actix-web) web framework
+# [Actix](https://actix.rs) web framework
 
 
 ## Description
 ## Description
 
 
 Actix web is a small, fast, pragmatic, open source rust web framework.
 Actix web is a small, fast, pragmatic, open source rust web framework.
 
 
-* [User Guide](http://actix.github.io/actix-web/guide/)
-* [API Documentation](http://actix.github.io/actix-web/actix_web/)
+* [User Guide](https://actix.rs/book/actix-web/)
+* [API Documentation](https://docs.rs/actix-web/)
+* [Chat on gitter](https://gitter.im/actix/actix)
 * Cargo package: [actix-web](https://crates.io/crates/actix-web)
 * Cargo package: [actix-web](https://crates.io/crates/actix-web)
 
 
 ## Features
 ## Features
@@ -13,7 +14,7 @@ Actix web is a small, fast, pragmatic, open source rust web framework.
 * Supported HTTP/1.x and HTTP/2.0 protocols
 * Supported HTTP/1.x and HTTP/2.0 protocols
 * Streaming and pipelining
 * Streaming and pipelining
 * Keep-alive and slow requests handling
 * Keep-alive and slow requests handling
-* WebSockets
+* Client/Server WebSockets
 * Transparent content compression/decompression (br, gzip, deflate)
 * Transparent content compression/decompression (br, gzip, deflate)
 * Configurable request routing
 * Configurable request routing
 * Graceful server shutdown
 * Graceful server shutdown

+ 0 - 5
frameworks/Rust/actix/build.rs

@@ -1,5 +0,0 @@
-extern crate askama;
-
-fn main() {
-    askama::rerun_if_templates_changed();
-}

+ 5 - 0
frameworks/Rust/actix/rustfmt.toml

@@ -0,0 +1,5 @@
+max_width = 89
+reorder_imports = true
+wrap_comments = true
+fn_args_density = "Compressed"
+#use_small_heuristics = false

+ 31 - 20
frameworks/Rust/actix/src/db.rs

@@ -1,17 +1,16 @@
 //! Db executor actor
 //! Db executor actor
-use std::io;
-use rand::{thread_rng, Rng, ThreadRng};
 use actix::prelude::*;
 use actix::prelude::*;
 use diesel;
 use diesel;
 use diesel::prelude::*;
 use diesel::prelude::*;
 use diesel::result::Error;
 use diesel::result::Error;
+use rand::{thread_rng, Rng, ThreadRng};
+use std::io;
 
 
 use models;
 use models;
 
 
-
-pub struct DbExecutor{
+pub struct DbExecutor {
     conn: PgConnection,
     conn: PgConnection,
-    rng: ThreadRng
+    rng: ThreadRng,
 }
 }
 
 
 unsafe impl Send for DbExecutor {}
 unsafe impl Send for DbExecutor {}
@@ -22,10 +21,11 @@ impl Actor for DbExecutor {
 
 
 impl DbExecutor {
 impl DbExecutor {
     pub fn new(db_url: &str) -> DbExecutor {
     pub fn new(db_url: &str) -> DbExecutor {
-        DbExecutor{
+        DbExecutor {
             conn: PgConnection::establish(db_url)
             conn: PgConnection::establish(db_url)
                 .expect(&format!("Error connecting to {}", db_url)),
                 .expect(&format!("Error connecting to {}", db_url)),
-            rng: thread_rng()}
+            rng: thread_rng(),
+        }
     }
     }
 }
 }
 
 
@@ -42,11 +42,12 @@ impl Handler<RandomWorld> for DbExecutor {
         use schema::world::dsl::*;
         use schema::world::dsl::*;
 
 
         let random_id = self.rng.gen_range(1, 10_000);
         let random_id = self.rng.gen_range(1, 10_000);
-        match world.filter(id.eq(random_id)).load::<models::World>(&self.conn) {
-            Ok(mut items) =>
-                Ok(items.pop().unwrap()),
-            Err(_) =>
-                Err(io::Error::new(io::ErrorKind::Other, "Database error")),
+        match world
+            .filter(id.eq(random_id))
+            .load::<models::World>(&self.conn)
+        {
+            Ok(mut items) => Ok(items.pop().unwrap()),
+            Err(_) => Err(io::Error::new(io::ErrorKind::Other, "Database error")),
         }
         }
     }
     }
 }
 }
@@ -66,9 +67,14 @@ impl Handler<RandomWorlds> for DbExecutor {
         let mut worlds = Vec::with_capacity(msg.0 as usize);
         let mut worlds = Vec::with_capacity(msg.0 as usize);
         for _ in 0..msg.0 {
         for _ in 0..msg.0 {
             let w_id = self.rng.gen_range(1, 10_000);
             let w_id = self.rng.gen_range(1, 10_000);
-            let w = match world.filter(id.eq(w_id)).load::<models::World>(&self.conn) {
+            let w = match world
+                .filter(id.eq(w_id))
+                .load::<models::World>(&self.conn)
+            {
                 Ok(mut items) => items.pop().unwrap(),
                 Ok(mut items) => items.pop().unwrap(),
-                Err(_) => return Err(io::Error::new(io::ErrorKind::Other, "Database error")),
+                Err(_) => {
+                    return Err(io::Error::new(io::ErrorKind::Other, "Database error"))
+                }
             };
             };
             worlds.push(w)
             worlds.push(w)
         }
         }
@@ -91,10 +97,14 @@ impl Handler<UpdateWorld> for DbExecutor {
         let mut worlds = Vec::with_capacity(msg.0);
         let mut worlds = Vec::with_capacity(msg.0);
         for _ in 0..msg.0 {
         for _ in 0..msg.0 {
             let w_id = self.rng.gen_range::<i32>(1, 10_000);
             let w_id = self.rng.gen_range::<i32>(1, 10_000);
-            let mut w = match world.filter(id.eq(w_id)).load::<models::World>(&self.conn) {
+            let mut w = match world
+                .filter(id.eq(w_id))
+                .load::<models::World>(&self.conn)
+            {
                 Ok(mut items) => items.pop().unwrap(),
                 Ok(mut items) => items.pop().unwrap(),
-                Err(_) => return Err(
-                    io::Error::new(io::ErrorKind::Other, "Database error")),
+                Err(_) => {
+                    return Err(io::Error::new(io::ErrorKind::Other, "Database error"))
+                }
             };
             };
             w.randomnumber = self.rng.gen_range(1, 10_000);
             w.randomnumber = self.rng.gen_range(1, 10_000);
             worlds.push(w);
             worlds.push(w);
@@ -129,13 +139,14 @@ impl Handler<TellFortune> for DbExecutor {
 
 
         match fortune.load::<models::Fortune>(&self.conn) {
         match fortune.load::<models::Fortune>(&self.conn) {
             Ok(mut items) => {
             Ok(mut items) => {
-                items.push(models::Fortune{
+                items.push(models::Fortune {
                     id: 0,
                     id: 0,
-                    message: "Additional fortune added at request time.".to_string()});
+                    message: "Additional fortune added at request time.".to_string(),
+                });
                 items.sort_by(|it, next| it.message.cmp(&next.message));
                 items.sort_by(|it, next| it.message.cmp(&next.message));
                 Ok(items)
                 Ok(items)
             }
             }
-            Err(e) => Err(io::Error::new(io::ErrorKind::Other, e))
+            Err(e) => Err(io::Error::new(io::ErrorKind::Other, e)),
         }
         }
     }
     }
 }
 }

+ 65 - 62
frameworks/Rust/actix/src/main.rs

@@ -1,51 +1,53 @@
 extern crate actix;
 extern crate actix;
 extern crate actix_web;
 extern crate actix_web;
 extern crate bytes;
 extern crate bytes;
-extern crate rand;
-extern crate num_cpus;
 extern crate futures;
 extern crate futures;
+extern crate num_cpus;
+extern crate rand;
 extern crate serde;
 extern crate serde;
 extern crate serde_json;
 extern crate serde_json;
-#[macro_use] extern crate serde_derive;
-#[macro_use] extern crate diesel;
-#[macro_use] extern crate askama;
+#[macro_use]
+extern crate serde_derive;
+#[macro_use]
+extern crate diesel;
+#[macro_use]
+extern crate horrorshow;
 
 
-use std::cmp;
 use actix::prelude::*;
 use actix::prelude::*;
+use actix_web::{http, server, App, AsyncResponder, FutureResponse, HttpRequest,
+                HttpResponse};
 use bytes::BytesMut;
 use bytes::BytesMut;
-use askama::Template;
-use futures::Future;
 use diesel::prelude::{Connection, PgConnection};
 use diesel::prelude::{Connection, PgConnection};
-use actix_web::{
-    http, server,
-    App, HttpRequest, HttpResponse, FutureResponse, AsyncResponder};
+use futures::Future;
+use std::cmp;
 
 
 mod db;
 mod db;
-mod schema;
 mod models;
 mod models;
+mod schema;
+mod tmpl;
 mod utils;
 mod utils;
 use utils::Writer;
 use utils::Writer;
 
 
 struct State {
 struct State {
-    db: Addr<Syn, db::DbExecutor>
+    db: Addr<Syn, db::DbExecutor>,
 }
 }
 
 
 fn world_row(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
 fn world_row(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
-    req.clone().state().db.send(db::RandomWorld)
+    req.clone()
+        .state()
+        .db
+        .send(db::RandomWorld)
         .from_err()
         .from_err()
-        .and_then(move |res| {
-            match res {
-                Ok(row) => {
-                    let mut body = BytesMut::with_capacity(31);
-                    serde_json::to_writer(Writer(&mut body), &row).unwrap();
-                    Ok(HttpResponse::build_from(&req)
-                       .header(http::header::SERVER, "Actix")
-                       .content_type("application/json")
-                       .body(body))
-                },
-                Err(_) =>
-                    Ok(HttpResponse::InternalServerError().into()),
+        .and_then(move |res| match res {
+            Ok(row) => {
+                let mut body = BytesMut::with_capacity(31);
+                serde_json::to_writer(Writer(&mut body), &row).unwrap();
+                Ok(HttpResponse::build_from(&req)
+                    .header(http::header::SERVER, "Actix")
+                    .content_type("application/json")
+                    .body(body))
             }
             }
+            Err(_) => Ok(HttpResponse::InternalServerError().into()),
         })
         })
         .responder()
         .responder()
 }
 }
@@ -60,16 +62,19 @@ fn queries(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
     let q = cmp::min(500, cmp::max(1, q));
     let q = cmp::min(500, cmp::max(1, q));
 
 
     // run sql queries
     // run sql queries
-    req.clone().state().db.send(db::RandomWorlds(q))
+    req.clone()
+        .state()
+        .db
+        .send(db::RandomWorlds(q))
         .from_err()
         .from_err()
         .and_then(move |res| {
         .and_then(move |res| {
             if let Ok(worlds) = res {
             if let Ok(worlds) = res {
                 let mut body = BytesMut::with_capacity(35 * worlds.len());
                 let mut body = BytesMut::with_capacity(35 * worlds.len());
                 serde_json::to_writer(Writer(&mut body), &worlds).unwrap();
                 serde_json::to_writer(Writer(&mut body), &worlds).unwrap();
                 Ok(HttpResponse::build_from(&req)
                 Ok(HttpResponse::build_from(&req)
-                   .header(http::header::SERVER, "Actix")
-                   .content_type("application/json")
-                   .body(body))
+                    .header(http::header::SERVER, "Actix")
+                    .content_type("application/json")
+                    .body(body))
             } else {
             } else {
                 Ok(HttpResponse::InternalServerError().into())
                 Ok(HttpResponse::InternalServerError().into())
             }
             }
@@ -87,16 +92,19 @@ fn updates(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
     let q = cmp::min(500, cmp::max(1, q));
     let q = cmp::min(500, cmp::max(1, q));
 
 
     // update worlds
     // update worlds
-    req.clone().state().db.send(db::UpdateWorld(q))
+    req.clone()
+        .state()
+        .db
+        .send(db::UpdateWorld(q))
         .from_err()
         .from_err()
         .and_then(move |res| {
         .and_then(move |res| {
             if let Ok(worlds) = res {
             if let Ok(worlds) = res {
                 let mut body = BytesMut::with_capacity(35 * worlds.len());
                 let mut body = BytesMut::with_capacity(35 * worlds.len());
                 serde_json::to_writer(Writer(&mut body), &worlds).unwrap();
                 serde_json::to_writer(Writer(&mut body), &worlds).unwrap();
                 Ok(HttpResponse::build_from(&req)
                 Ok(HttpResponse::build_from(&req)
-                   .header(http::header::SERVER, "Actix")
-                   .content_type("application/json")
-                   .body(body))
+                    .header(http::header::SERVER, "Actix")
+                    .content_type("application/json")
+                    .body(body))
             } else {
             } else {
                 Ok(HttpResponse::InternalServerError().into())
                 Ok(HttpResponse::InternalServerError().into())
             }
             }
@@ -104,30 +112,22 @@ fn updates(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
         .responder()
         .responder()
 }
 }
 
 
-#[derive(Template)]
-#[template(path = "fortune.html")]
-struct FortuneTemplate<'a> {
-    items: &'a Vec<models::Fortune>,
-}
-
 fn fortune(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
 fn fortune(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
-    req.clone().state().db.send(db::TellFortune)
+    req.clone()
+        .state()
+        .db
+        .send(db::TellFortune)
         .from_err()
         .from_err()
-        .and_then(move |res| {
-            match res {
-                Ok(rows) => {
-                    let tmpl = FortuneTemplate { items: &rows };
-                    let res = tmpl.render().unwrap();
+        .and_then(move |res| match res {
+            Ok(rows) => {
+                let res = tmpl::render_fortune(&rows);
 
 
-                    Ok(HttpResponse::build_from(&req)
-                       .header(http::header::SERVER, "Actix")
-                       .content_type("text/html; charset=utf-8")
-                       .body(res))
-                },
-                Err(_) => {
-                    Ok(HttpResponse::InternalServerError().into())
-                }
+                Ok(HttpResponse::build_from(&req)
+                    .header(http::header::SERVER, "Actix")
+                    .content_type("text/html; charset=utf-8")
+                    .body(res))
             }
             }
+            Err(_) => Ok(HttpResponse::InternalServerError().into()),
         })
         })
         .responder()
         .responder()
 }
 }
@@ -136,7 +136,8 @@ fn main() {
     let sys = System::new("techempower");
     let sys = System::new("techempower");
     let db_url = "postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world";
     let db_url = "postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world";
 
 
-    // Avoid triggering "FATAL: the database system is starting up" error from postgres.
+    // Avoid triggering "FATAL: the database system is starting up" error from
+    // postgres.
     {
     {
         if PgConnection::establish(db_url).is_err() {
         if PgConnection::establish(db_url).is_err() {
             std::thread::sleep(std::time::Duration::from_secs(5));
             std::thread::sleep(std::time::Duration::from_secs(5));
@@ -144,19 +145,21 @@ fn main() {
     }
     }
 
 
     // Start db executor actors
     // Start db executor actors
-    let addr = SyncArbiter::start(
-        num_cpus::get() * 4, move || db::DbExecutor::new(db_url));
+    let addr = SyncArbiter::start(num_cpus::get() * 4, move || {
+        db::DbExecutor::new(db_url)
+    });
 
 
     // start http server
     // start http server
-    server::new(
-        move || App::with_state(State{db: addr.clone()})
+    server::new(move || {
+        App::with_state(State { db: addr.clone() })
             .default_encoding(http::ContentEncoding::Identity)
             .default_encoding(http::ContentEncoding::Identity)
             .resource("/db", |r| r.route().a(world_row))
             .resource("/db", |r| r.route().a(world_row))
             .resource("/fortune", |r| r.route().a(fortune))
             .resource("/fortune", |r| r.route().a(fortune))
             .resource("/queries", |r| r.route().a(queries))
             .resource("/queries", |r| r.route().a(queries))
-            .resource("/updates", |r| r.route().a(updates)))
-        .backlog(8192)
-        .bind("0.0.0.0:8080").unwrap()
+            .resource("/updates", |r| r.route().a(updates))
+    }).backlog(8192)
+        .bind("0.0.0.0:8080")
+        .unwrap()
         .start();
         .start();
 
 
     println!("Started http server: 127.0.0.1:8080");
     println!("Started http server: 127.0.0.1:8080");

+ 101 - 90
frameworks/Rust/actix/src/pg.rs

@@ -1,61 +1,54 @@
 extern crate actix;
 extern crate actix;
 extern crate actix_web;
 extern crate actix_web;
 extern crate bytes;
 extern crate bytes;
-extern crate rand;
-extern crate num_cpus;
 extern crate futures;
 extern crate futures;
+extern crate num_cpus;
 extern crate postgres;
 extern crate postgres;
+extern crate rand;
 extern crate serde;
 extern crate serde;
 extern crate serde_json;
 extern crate serde_json;
-#[macro_use] extern crate serde_derive;
-#[macro_use] extern crate askama;
+#[macro_use]
+extern crate serde_derive;
+#[macro_use]
+extern crate horrorshow;
+#[macro_use]
+extern crate diesel;
 
 
-use std::{io, cmp};
 use actix::prelude::*;
 use actix::prelude::*;
-use askama::Template;
+use actix_web::{http, server, App, AsyncResponder, FutureResponse, HttpRequest,
+                HttpResponse};
 use bytes::BytesMut;
 use bytes::BytesMut;
+use futures::Future;
 use postgres::{Connection, TlsMode};
 use postgres::{Connection, TlsMode};
 use rand::{thread_rng, Rng, ThreadRng};
 use rand::{thread_rng, Rng, ThreadRng};
-use futures::Future;
-use actix_web::{
-    http, server, App, HttpRequest, HttpResponse, FutureResponse, AsyncResponder};
+use std::{cmp, io};
 
 
+mod models;
+mod tmpl;
 mod utils;
 mod utils;
+use models::{Fortune, World};
 use utils::Writer;
 use utils::Writer;
 
 
-
-#[derive(Serialize)]
-pub struct World {
-    pub id: i32,
-    pub randomnumber: i32,
-}
-
-#[derive(Serialize)]
-pub struct Fortune {
-    pub id: i32,
-    pub message: String,
-}
-
-
 struct State {
 struct State {
-    db: Addr<Syn, PgConnection>
+    db: Addr<Syn, PgConnection>,
 }
 }
 
 
 fn world_row(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
 fn world_row(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
-    req.clone().state().db.send(RandomWorld)
+    req.clone()
+        .state()
+        .db
+        .send(RandomWorld)
         .from_err()
         .from_err()
-        .and_then(move |res| {
-            match res {
-                Ok(row) => {
-                    let mut body = BytesMut::with_capacity(31);
-                    serde_json::to_writer(Writer(&mut body), &row).unwrap();
-                    Ok(HttpResponse::build_from(&req)
-                       .header(http::header::SERVER, "Actix")
-                       .content_type("application/json")
-                       .body(body))
-                },
-                Err(_) => Ok(HttpResponse::InternalServerError().into()),
+        .and_then(move |res| match res {
+            Ok(row) => {
+                let mut body = BytesMut::with_capacity(31);
+                serde_json::to_writer(Writer(&mut body), &row).unwrap();
+                Ok(HttpResponse::build_from(&req)
+                    .header(http::header::SERVER, "Actix")
+                    .content_type("application/json")
+                    .body(body))
             }
             }
+            Err(_) => Ok(HttpResponse::InternalServerError().into()),
         })
         })
         .responder()
         .responder()
 }
 }
@@ -70,16 +63,19 @@ fn queries(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
     let q = cmp::min(500, cmp::max(1, q));
     let q = cmp::min(500, cmp::max(1, q));
 
 
     // run sql queries
     // run sql queries
-    req.clone().state().db.send(RandomWorlds(q))
+    req.clone()
+        .state()
+        .db
+        .send(RandomWorlds(q))
         .from_err()
         .from_err()
         .and_then(move |res| {
         .and_then(move |res| {
             if let Ok(worlds) = res {
             if let Ok(worlds) = res {
                 let mut body = BytesMut::with_capacity(35 * worlds.len());
                 let mut body = BytesMut::with_capacity(35 * worlds.len());
                 serde_json::to_writer(Writer(&mut body), &worlds).unwrap();
                 serde_json::to_writer(Writer(&mut body), &worlds).unwrap();
                 Ok(HttpResponse::build_from(&req)
                 Ok(HttpResponse::build_from(&req)
-                   .header(http::header::SERVER, "Actix")
-                   .content_type("application/json")
-                   .body(body))
+                    .header(http::header::SERVER, "Actix")
+                    .content_type("application/json")
+                    .body(body))
             } else {
             } else {
                 Ok(HttpResponse::InternalServerError().into())
                 Ok(HttpResponse::InternalServerError().into())
             }
             }
@@ -97,16 +93,19 @@ fn updates(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
     let q = cmp::min(500, cmp::max(1, q));
     let q = cmp::min(500, cmp::max(1, q));
 
 
     // update db
     // update db
-    req.clone().state().db.send(UpdateWorld(q))
+    req.clone()
+        .state()
+        .db
+        .send(UpdateWorld(q))
         .from_err()
         .from_err()
         .and_then(move |res| {
         .and_then(move |res| {
             if let Ok(worlds) = res {
             if let Ok(worlds) = res {
                 let mut body = BytesMut::with_capacity(35 * worlds.len());
                 let mut body = BytesMut::with_capacity(35 * worlds.len());
                 serde_json::to_writer(Writer(&mut body), &worlds).unwrap();
                 serde_json::to_writer(Writer(&mut body), &worlds).unwrap();
                 Ok(HttpResponse::build_from(&req)
                 Ok(HttpResponse::build_from(&req)
-                   .header(http::header::SERVER, "Actix")
-                   .content_type("application/json")
-                   .body(body))
+                    .header(http::header::SERVER, "Actix")
+                    .content_type("application/json")
+                    .body(body))
             } else {
             } else {
                 Ok(HttpResponse::InternalServerError().into())
                 Ok(HttpResponse::InternalServerError().into())
             }
             }
@@ -114,28 +113,21 @@ fn updates(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
         .responder()
         .responder()
 }
 }
 
 
-#[derive(Template)]
-#[template(path = "fortune.html")]
-struct FortuneTemplate<'a> {
-    items: &'a Vec<Fortune>,
-}
-
 fn fortune(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
 fn fortune(req: HttpRequest<State>) -> FutureResponse<HttpResponse> {
-    req.state().db.send(TellFortune)
+    req.state()
+        .db
+        .send(TellFortune)
         .from_err()
         .from_err()
-        .and_then(|res| {
-            match res {
-                Ok(rows) => {
-                    let tmpl = FortuneTemplate { items: &rows };
-                    let res = tmpl.render().unwrap();
-
-                    Ok(HttpResponse::Ok()
-                       .header(http::header::SERVER, "Actix")
-                       .content_type("text/html; charset=utf-8")
-                       .body(res))
-                },
-                Err(_) => Ok(HttpResponse::InternalServerError().into())
+        .and_then(|res| match res {
+            Ok(rows) => {
+                let res = tmpl::render_fortune(&rows);
+
+                Ok(HttpResponse::Ok()
+                    .header(http::header::SERVER, "Actix")
+                    .content_type("text/html; charset=utf-8")
+                    .body(res))
             }
             }
+            Err(_) => Ok(HttpResponse::InternalServerError().into()),
         })
         })
         .responder()
         .responder()
 }
 }
@@ -154,7 +146,7 @@ impl PgConnection {
     pub fn new(db_url: &str) -> PgConnection {
     pub fn new(db_url: &str) -> PgConnection {
         let conn = Connection::connect(db_url, TlsMode::None)
         let conn = Connection::connect(db_url, TlsMode::None)
             .expect(&format!("Error connecting to {}", db_url));
             .expect(&format!("Error connecting to {}", db_url));
-        PgConnection{
+        PgConnection {
             conn,
             conn,
             rng: thread_rng(),
             rng: thread_rng(),
         }
         }
@@ -163,7 +155,6 @@ impl PgConnection {
 
 
 unsafe impl Send for PgConnection {}
 unsafe impl Send for PgConnection {}
 
 
-
 pub struct RandomWorld;
 pub struct RandomWorld;
 
 
 impl Message for RandomWorld {
 impl Message for RandomWorld {
@@ -174,13 +165,17 @@ impl Handler<RandomWorld> for PgConnection {
     type Result = io::Result<World>;
     type Result = io::Result<World>;
 
 
     fn handle(&mut self, _: RandomWorld, _: &mut Self::Context) -> Self::Result {
     fn handle(&mut self, _: RandomWorld, _: &mut Self::Context) -> Self::Result {
-        let random_world = self.conn.prepare_cached(
-            "SELECT id, randomnumber FROM world WHERE id=$1").unwrap();
+        let random_world = self.conn
+            .prepare_cached("SELECT id, randomnumber FROM world WHERE id=$1")
+            .unwrap();
 
 
         let random_id = self.rng.gen_range::<i32>(1, 10_000);
         let random_id = self.rng.gen_range::<i32>(1, 10_000);
         let rows = &random_world.query(&[&random_id]).unwrap();
         let rows = &random_world.query(&[&random_id]).unwrap();
         let row = rows.get(0);
         let row = rows.get(0);
-        Ok(World {id: row.get(0), randomnumber: row.get(1)})
+        Ok(World {
+            id: row.get(0),
+            randomnumber: row.get(1),
+        })
     }
     }
 }
 }
 
 
@@ -194,15 +189,19 @@ impl Handler<RandomWorlds> for PgConnection {
     type Result = io::Result<Vec<World>>;
     type Result = io::Result<Vec<World>>;
 
 
     fn handle(&mut self, msg: RandomWorlds, _: &mut Self::Context) -> Self::Result {
     fn handle(&mut self, msg: RandomWorlds, _: &mut Self::Context) -> Self::Result {
-        let random_world = self.conn.prepare_cached(
-            "SELECT id, randomnumber FROM world WHERE id=$1").unwrap();
+        let random_world = self.conn
+            .prepare_cached("SELECT id, randomnumber FROM world WHERE id=$1")
+            .unwrap();
 
 
         let mut worlds = Vec::with_capacity(msg.0 as usize);
         let mut worlds = Vec::with_capacity(msg.0 as usize);
         for _ in 0..msg.0 {
         for _ in 0..msg.0 {
             let w_id: i32 = self.rng.gen_range(1, 10_000);
             let w_id: i32 = self.rng.gen_range(1, 10_000);
             let rows = &random_world.query(&[&w_id]).unwrap();
             let rows = &random_world.query(&[&w_id]).unwrap();
             let row = rows.get(0);
             let row = rows.get(0);
-            worlds.push(World {id: row.get(0), randomnumber: row.get(1)});
+            worlds.push(World {
+                id: row.get(0),
+                randomnumber: row.get(1),
+            });
         }
         }
         Ok(worlds)
         Ok(worlds)
     }
     }
@@ -218,8 +217,9 @@ impl Handler<UpdateWorld> for PgConnection {
     type Result = io::Result<Vec<World>>;
     type Result = io::Result<Vec<World>>;
 
 
     fn handle(&mut self, msg: UpdateWorld, _: &mut Self::Context) -> Self::Result {
     fn handle(&mut self, msg: UpdateWorld, _: &mut Self::Context) -> Self::Result {
-        let get_world = self.conn.prepare_cached(
-            "SELECT id FROM world WHERE id=$1").unwrap();
+        let get_world = self.conn
+            .prepare_cached("SELECT id FROM world WHERE id=$1")
+            .unwrap();
 
 
         let mut worlds = Vec::with_capacity(msg.0 as usize);
         let mut worlds = Vec::with_capacity(msg.0 as usize);
         for _ in 0..msg.0 {
         for _ in 0..msg.0 {
@@ -228,13 +228,17 @@ impl Handler<UpdateWorld> for PgConnection {
             let row = rows.get(0);
             let row = rows.get(0);
             let w_id: i32 = row.get(0);
             let w_id: i32 = row.get(0);
             let new_num: i32 = self.rng.gen_range(1, 10_000);
             let new_num: i32 = self.rng.gen_range(1, 10_000);
-            worlds.push(World{id: w_id, randomnumber: new_num});
+            worlds.push(World {
+                id: w_id,
+                randomnumber: new_num,
+            });
         }
         }
         worlds.sort_by_key(|w| w.id);
         worlds.sort_by_key(|w| w.id);
 
 
         let trans = self.conn.transaction().unwrap();
         let trans = self.conn.transaction().unwrap();
-        let update_world = trans.prepare_cached(
-            "UPDATE world SET randomnumber=$1 WHERE id=$2").unwrap();
+        let update_world = trans
+            .prepare_cached("UPDATE world SET randomnumber=$1 WHERE id=$2")
+            .unwrap();
         for w in &worlds {
         for w in &worlds {
             let _ = update_world.execute(&[&w.id, &w.randomnumber]);
             let _ = update_world.execute(&[&w.id, &w.randomnumber]);
         }
         }
@@ -254,27 +258,33 @@ impl Handler<TellFortune> for PgConnection {
     type Result = io::Result<Vec<Fortune>>;
     type Result = io::Result<Vec<Fortune>>;
 
 
     fn handle(&mut self, _: TellFortune, _: &mut Self::Context) -> Self::Result {
     fn handle(&mut self, _: TellFortune, _: &mut Self::Context) -> Self::Result {
-        let fortune = self.conn.prepare_cached("SELECT id, message FROM fortune").unwrap();
+        let fortune = self.conn
+            .prepare_cached("SELECT id, message FROM fortune")
+            .unwrap();
 
 
         let mut items = Vec::with_capacity(16);
         let mut items = Vec::with_capacity(16);
-        items.push(
-            Fortune{id: 0,
-                    message: "Additional fortune added at request time.".to_string()});
+        items.push(Fortune {
+            id: 0,
+            message: "Additional fortune added at request time.".to_string(),
+        });
 
 
         for row in &fortune.query(&[])? {
         for row in &fortune.query(&[])? {
-            items.push(Fortune{id: row.get(0), message: row.get(1)});
+            items.push(Fortune {
+                id: row.get(0),
+                message: row.get(1),
+            });
         }
         }
         items.sort_by(|it, next| it.message.cmp(&next.message));
         items.sort_by(|it, next| it.message.cmp(&next.message));
         Ok(items)
         Ok(items)
     }
     }
 }
 }
 
 
-
 fn main() {
 fn main() {
     let sys = System::new("techempower");
     let sys = System::new("techempower");
     let db_url = "postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world";
     let db_url = "postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world";
 
 
-    // Avoid triggering "FATAL: the database system is starting up" error from postgres.
+    // Avoid triggering "FATAL: the database system is starting up" error from
+    // postgres.
     {
     {
         if Connection::connect(db_url, TlsMode::None).is_err() {
         if Connection::connect(db_url, TlsMode::None).is_err() {
             std::thread::sleep(std::time::Duration::from_secs(5));
             std::thread::sleep(std::time::Duration::from_secs(5));
@@ -282,19 +292,20 @@ fn main() {
     }
     }
 
 
     // Start db executor actors
     // Start db executor actors
-    let addr = SyncArbiter::start(
-        num_cpus::get() * 4, move || PgConnection::new(db_url));
+    let addr =
+        SyncArbiter::start(num_cpus::get() * 4, move || PgConnection::new(db_url));
 
 
     // start http server
     // start http server
-    server::new(
-        move || App::with_state(State{db: addr.clone()})
+    server::new(move || {
+        App::with_state(State { db: addr.clone() })
             .default_encoding(http::ContentEncoding::Identity)
             .default_encoding(http::ContentEncoding::Identity)
             .resource("/db", |r| r.route().a(world_row))
             .resource("/db", |r| r.route().a(world_row))
             .resource("/queries", |r| r.route().a(queries))
             .resource("/queries", |r| r.route().a(queries))
             .resource("/fortune", |r| r.route().a(fortune))
             .resource("/fortune", |r| r.route().a(fortune))
-            .resource("/updates", |r| r.route().a(updates)))
-        .backlog(8192)
-        .bind("0.0.0.0:8080").unwrap()
+            .resource("/updates", |r| r.route().a(updates))
+    }).backlog(8192)
+        .bind("0.0.0.0:8080")
+        .unwrap()
         .start();
         .start();
 
 
     println!("Started http server: 127.0.0.1:8080");
     println!("Started http server: 127.0.0.1:8080");

+ 10 - 8
frameworks/Rust/actix/src/simple.rs

@@ -4,11 +4,12 @@ extern crate bytes;
 extern crate futures;
 extern crate futures;
 extern crate serde;
 extern crate serde;
 extern crate serde_json;
 extern crate serde_json;
-#[macro_use] extern crate serde_derive;
+#[macro_use]
+extern crate serde_derive;
 
 
-use bytes::BytesMut;
 use actix::prelude::*;
 use actix::prelude::*;
 use actix_web::{http, server, App, HttpRequest, HttpResponse};
 use actix_web::{http, server, App, HttpRequest, HttpResponse};
+use bytes::BytesMut;
 
 
 mod utils;
 mod utils;
 use utils::Writer;
 use utils::Writer;
@@ -22,7 +23,7 @@ pub struct Message {
 
 
 fn json(req: HttpRequest) -> HttpResponse {
 fn json(req: HttpRequest) -> HttpResponse {
     let message = Message {
     let message = Message {
-        message: "Hello, World!"
+        message: "Hello, World!",
     };
     };
     let mut body = BytesMut::with_capacity(SIZE);
     let mut body = BytesMut::with_capacity(SIZE);
     serde_json::to_writer(Writer(&mut body), &message).unwrap();
     serde_json::to_writer(Writer(&mut body), &message).unwrap();
@@ -44,12 +45,13 @@ fn main() {
     let sys = System::new("techempower");
     let sys = System::new("techempower");
 
 
     // start http server
     // start http server
-    server::new(
-        move || App::new()
+    server::new(move || {
+        App::new()
+            .resource("/json", |r| r.f(json))
             .resource("/plaintext", |r| r.f(plaintext))
             .resource("/plaintext", |r| r.f(plaintext))
-            .resource("/json", |r| r.f(json)))
-        .backlog(8192)
-        .bind("0.0.0.0:8080").unwrap()
+    }).backlog(8192)
+        .bind("0.0.0.0:8080")
+        .unwrap()
         .start();
         .start();
 
 
     println!("Started http server: 127.0.0.1:8080");
     println!("Started http server: 127.0.0.1:8080");

+ 33 - 0
frameworks/Rust/actix/src/tmpl.rs

@@ -0,0 +1,33 @@
+use horrorshow::helper::doctype;
+
+use models::Fortune;
+
+#[inline]
+pub fn render_fortune(items: &Vec<Fortune>) -> String {
+    format!(
+        "{}",
+        html! {
+            : doctype::HTML;
+            html {
+                head {
+                    title : "Fortunes";
+                }
+                body {
+                    table {
+                        tr {
+                            th { : "id" }
+                            th { : "message" }
+                        }
+                        // You can embed for loops, while loops, and if statements.
+                        @ for item in items {
+                            tr {
+                                td { :&item.id }
+                                td { :&item.message }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    )
+}

+ 1 - 2
frameworks/Rust/actix/src/utils.rs

@@ -1,6 +1,5 @@
-use std::io;
 use bytes::BytesMut;
 use bytes::BytesMut;
-
+use std::io;
 
 
 pub struct Writer<'a>(pub &'a mut BytesMut);
 pub struct Writer<'a>(pub &'a mut BytesMut);