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