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); })); }