From 7ce8cd9ffcd583311b33322aad3ec79e86d06db0 Mon Sep 17 00:00:00 2001 From: Tom Date: Sat, 12 Mar 2022 11:53:28 +0100 Subject: [PATCH] Implement Render trait for Option --- sailfish/src/runtime/render.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/sailfish/src/runtime/render.rs b/sailfish/src/runtime/render.rs index e9b3f704..2f7dd6b4 100644 --- a/sailfish/src/runtime/render.rs +++ b/sailfish/src/runtime/render.rs @@ -362,6 +362,26 @@ impl Render for Wrapping { } } +impl Render for Option { + #[inline] + fn render(&self, b: &mut Buffer) -> Result<(), RenderError> { + if let Some(inner) = self { + inner.render(b) + } else { + Ok(()) + } + } + + #[inline] + fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> { + if let Some(inner) = self { + inner.render_escaped(b) + } else { + Ok(()) + } + } +} + /// The error type which is returned from template function #[derive(Clone, Debug)] pub enum RenderError { @@ -521,6 +541,18 @@ mod tests { assert_eq!(b.as_str(), "10-20"); } + #[test] + fn test_option() { + let mut b = Buffer::new(); + Render::render(&Some("apple"), &mut b).unwrap(); + Render::render_escaped(&Some("apple"), &mut b).unwrap(); + + Render::render(&Option::<&str>::None, &mut b).unwrap(); + Render::render_escaped(&Option::<&str>::None, &mut b).unwrap(); + + assert_eq!(b.as_str(), "appleapple"); + } + #[test] fn render_error() { let err = RenderError::new("custom error");