}
}
+enum Child {
+ Container(Container),
+ Heading(Box<Heading>),
+}
+
+impl Child {
+ fn emit<W>(&self, writer: &mut XmlWriter<W>) -> IoResult<()>
+ where
+ W: Write,
+ {
+ match self {
+ Child::Container(container) => container.emit(writer),
+ Child::Heading(heading) => heading.emit(writer),
+ }
+ }
+}
+
fn maybe_with_attribute<'a, 'b, W, I>(
element: ElementWriter<'a, W>,
attr: Option<I>,
where
W: Write,
{
- let mut element = if !self.content.is_heading() {
- let mut element = writer
- .create_element("container")
- .with_attribute(("visibility", if self.show { "visible" } else { "hidden" }));
- if self.page_break_before {
- element = element.with_attribute(("page-break-before", "always"));
- }
- element
- } else {
- let mut element = writer
- .create_element("heading")
- .with_attribute(("visibility", if self.show { "visible" } else { "hidden" }));
- };
+ let mut element = writer
+ .create_element("container")
+ .with_attribute(("visibility", if self.show { "visible" } else { "hidden" }));
+ if self.page_break_before {
+ element = element.with_attribute(("page-break-before", "always"));
+ }
element.write_inner_content(|writer| {
self.label.emit(writer)?;
self.content
}
enum Content {
- Heading(Vec<Box<Container>>),
Table(Table),
}
);
element
}
-
- fn is_heading(&self) -> bool {
- match self {
- Content::Heading(_) => true,
- _ => false,
- }
- }
-
- fn element_name(&self) -> &'static str {
- if self.is_heading() {
- "heading"
- } else {
- "container"
- }
- }
}
struct Table {