From fd59814f8ba9e3426dcc13c49f56c600d85c5d4e Mon Sep 17 00:00:00 2001
From: Coleman McFarland <coleman.mcfarland@gmail.com>
Date: Mon, 11 Jun 2018 14:05:35 -0700
Subject: [PATCH] impl Responder for actix-web framework

It looks similar to the Rocket implementation, and functionally is also similar:
a syncronous response for PreEscaped<String>

Refs #135
---
 maud/Cargo.toml |  1 +
 maud/src/lib.rs | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/maud/Cargo.toml b/maud/Cargo.toml
index ab40265..7feca8f 100644
--- a/maud/Cargo.toml
+++ b/maud/Cargo.toml
@@ -17,6 +17,7 @@ maud_htmlescape = { version = "0.17.0", path = "../maud_htmlescape" }
 maud_macros = { version = "0.17.5", path = "../maud_macros" }
 iron = { version = ">= 0.5.1, < 0.7.0", optional = true }
 rocket = { version = "0.3", optional = true }
+actix-web = { version = "0.6.12", optional = true }
 
 [dev-dependencies]
 maud_lints = { version = "0.17.0", path = "../maud_lints" }
diff --git a/maud/src/lib.rs b/maud/src/lib.rs
index 0a245ab..8dc7410 100644
--- a/maud/src/lib.rs
+++ b/maud/src/lib.rs
@@ -10,6 +10,7 @@
 
 #![doc(html_root_url = "https://docs.rs/maud/0.17.5")]
 
+#[cfg(feature = "actix-web")] extern crate actix_web;
 #[cfg(feature = "iron")] extern crate iron;
 #[cfg(feature = "rocket")] extern crate rocket;
 
@@ -189,3 +190,17 @@ mod rocket_support {
         }
     }
 }
+
+#[cfg(feature = "actix-web")]
+mod actix_support {
+    use PreEscaped;
+    use actix_web::{Responder, HttpResponse, HttpRequest, Error};
+
+    impl Responder for PreEscaped<String> {
+        type Item = HttpResponse;
+        type Error = Error;
+        fn respond_to<String>(self, _req: &HttpRequest<String>) -> Result<Self::Item, Self::Error> {
+            Ok(HttpResponse::Ok().body(self.0))
+        }
+    }
+}