}
}
-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 = 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"));
- }
+ 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" }));
+ };
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 {