From 1ab01cca27a2a1ec0a10830ee3a9062b0a49cf04 Mon Sep 17 00:00:00 2001
From: Imbolc <me@imbolc.name>
Date: Sun, 28 May 2023 17:11:37 +0600
Subject: [PATCH] Remove `AsRef<str>` restriction from structs (#377)

---
 CHANGELOG.md                 | 3 +++
 docs/content/render-trait.md | 2 +-
 maud/src/lib.rs              | 8 ++++----
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 94d85cb..279b9cb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
 
 ## [Unreleased]
 
+- Remove `AsRef<str>` restriction from `PreEscaped`
+  [#377](https://github.com/lambda-fairy/maud/pull/377)
+
 ## [0.25.0] - 2023-04-16
 
 - Remove `html_debug!`
diff --git a/docs/content/render-trait.md b/docs/content/render-trait.md
index 2f536ff..11e3dad 100644
--- a/docs/content/render-trait.md
+++ b/docs/content/render-trait.md
@@ -64,7 +64,7 @@ use maud::{Markup, PreEscaped, Render};
 use pulldown_cmark::{Parser, html};
 
 /// Renders a block of Markdown using `pulldown-cmark`.
-struct Markdown<T: AsRef<str>>(T);
+struct Markdown<T>(T);
 
 impl<T: AsRef<str>> Render for Markdown<T> {
     fn render(&self) -> Markup {
diff --git a/maud/src/lib.rs b/maud/src/lib.rs
index 5dd74d0..1b8c494 100644
--- a/maud/src/lib.rs
+++ b/maud/src/lib.rs
@@ -215,7 +215,7 @@ pub fn display(value: impl Display) -> impl Render {
 
 /// A wrapper that renders the inner value without escaping.
 #[derive(Debug, Clone, Copy)]
-pub struct PreEscaped<T: AsRef<str>>(pub T);
+pub struct PreEscaped<T>(pub T);
 
 impl<T: AsRef<str>> Render for PreEscaped<T> {
     fn render_to(&self, w: &mut String) {
@@ -228,20 +228,20 @@ impl<T: AsRef<str>> Render for PreEscaped<T> {
 /// The `html!` macro expands to an expression of this type.
 pub type Markup = PreEscaped<String>;
 
-impl<T: AsRef<str> + Into<String>> PreEscaped<T> {
+impl<T: Into<String>> PreEscaped<T> {
     /// Converts the inner value to a string.
     pub fn into_string(self) -> String {
         self.0.into()
     }
 }
 
-impl<T: AsRef<str> + Into<String>> From<PreEscaped<T>> for String {
+impl<T: Into<String>> From<PreEscaped<T>> for String {
     fn from(value: PreEscaped<T>) -> String {
         value.into_string()
     }
 }
 
-impl<T: AsRef<str> + Default> Default for PreEscaped<T> {
+impl<T: Default> Default for PreEscaped<T> {
     fn default() -> Self {
         Self(Default::default())
     }