From 90e0f1ccbda1d2cd444e3559625c1b8186e41442 Mon Sep 17 00:00:00 2001
From: Chris Wong <lambda.fairy@gmail.com>
Date: Sat, 22 Oct 2016 19:57:48 +1300
Subject: [PATCH] Restrict `PreEscaped` to `T: AsRef<str>`

Closes #54
---
 maud/src/lib.rs | 18 +++---------------
 1 file changed, 3 insertions(+), 15 deletions(-)

diff --git a/maud/src/lib.rs b/maud/src/lib.rs
index 0a4aa44..5ec2663 100644
--- a/maud/src/lib.rs
+++ b/maud/src/lib.rs
@@ -122,23 +122,11 @@ impl<'a, T: Render + ?Sized> RenderOnce for &'a T {
 
 /// A wrapper that renders the inner value without escaping.
 #[derive(Debug)]
-pub struct PreEscaped<T>(pub T);
+pub struct PreEscaped<T: AsRef<str>>(pub T);
 
-impl<T: fmt::Display> Render for PreEscaped<T> {
-    default fn render_to(&self, w: &mut String) {
-        let _ = write!(w, "{}", self.0);
-    }
-}
-
-impl Render for PreEscaped<String> {
+impl<T: AsRef<str>> Render for PreEscaped<T> {
     fn render_to(&self, w: &mut String) {
-        w.push_str(&self.0);
-    }
-}
-
-impl<'a> Render for PreEscaped<&'a str> {
-    fn render_to(&self, w: &mut String) {
-        w.push_str(self.0);
+        w.push_str(self.0.as_ref());
     }
 }