From f046b64409b6372062fc90b2dac7cca6f6248de8 Mon Sep 17 00:00:00 2001
From: Chris Wong <lambda.fairy@gmail.com>
Date: Fri, 11 Aug 2017 19:57:07 +1200
Subject: [PATCH] Avoid name collisions when Render trait is already in scope

Closes #97
---
 CHANGELOG.md              |  5 +++++
 maud/tests/misc.rs        | 15 +++++++++++++++
 maud_macros/src/render.rs |  4 ++--
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index ba00083..36a5d2b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Change Log
 
+## [Unreleased]
+
+- [Fixed] "Multiple applicable items in scope" error when using `Render` trait
+  [#97](https://github.com/lfairy/maud/issues/97)
+
 ## [0.17.0] - 2017-08-04
 
 - [Added] Allow terminating void elements with semicolons (`;`)
diff --git a/maud/tests/misc.rs b/maud/tests/misc.rs
index c367db3..a6de780 100644
--- a/maud/tests/misc.rs
+++ b/maud/tests/misc.rs
@@ -67,3 +67,18 @@ fn render_impl() {
     assert_eq!(s1, "pinkie");
     assert_eq!(s2, "pinkie");
 }
+
+#[test]
+fn issue_97() {
+    use maud::Render;
+
+    struct Pinkie;
+    impl Render for Pinkie {
+        fn render(&self) -> maud::Markup {
+            let x = 42;
+            html! { (x) }
+        }
+    }
+
+    assert_eq!(html!((Pinkie)).into_string(), "42");
+}
diff --git a/maud_macros/src/render.rs b/maud_macros/src/render.rs
index 048e06b..64b6c5b 100644
--- a/maud_macros/src/render.rs
+++ b/maud_macros/src/render.rs
@@ -84,12 +84,12 @@ impl Renderer {
             extern crate maud;
             // Create a local trait alias so that autoref works
             trait Render: maud::Render {
-                fn render_to(&self, output: &mut String) {
+                fn __maud_render_to(&self, output: &mut String) {
                     maud::Render::render_to(self, output);
                 }
             }
             impl<T: maud::Render> Render for T {}
-            $expr.render_to(&mut $output);
+            $expr.__maud_render_to(&mut $output);
         }));
     }