diff --git a/src/element.rs b/src/element.rs index c9e798a..6120420 100644 --- a/src/element.rs +++ b/src/element.rs @@ -99,3 +99,9 @@ impl Element { self } } + +/// An HTML document. +/// +/// A `Document(el)` is basically the same as `[Content::doctype(), el.into()]` +/// for the purposes of the [`crate::Render`] trait. +pub struct Document(pub Element); diff --git a/src/render.rs b/src/render.rs index c1d4a0a..7acbd78 100644 --- a/src/render.rs +++ b/src/render.rs @@ -3,6 +3,7 @@ use std::{error, fmt}; use crate::{ check, element::{Content, Element, ElementKind}, + Document, }; #[derive(Debug)] @@ -81,6 +82,14 @@ pub trait Render { } } +impl Render for Document { + fn render(&self, w: &mut W) -> Result<()> { + Content::doctype().render(w)?; + self.0.render(w)?; + Ok(()) + } +} + impl Render for [Content] { fn render(&self, w: &mut W) -> Result<()> { for content in self {