use crate::question::TextFormat;
use crate::quiz::QuizError;
use std::fs::File;
use xml::writer::{EventWriter, XmlEvent};
pub fn write_text_tag(
writer: &mut EventWriter<&File>,
data: &str,
cdata: bool,
) -> Result<(), QuizError> {
writer.write(XmlEvent::start_element("text"))?;
if cdata {
writer.write(XmlEvent::cdata(data))?;
} else {
writer.write(XmlEvent::characters(data))?;
}
writer.write(XmlEvent::end_element())?;
Ok(())
}
pub fn write_named_formatted_scope<F>(
writer: &mut EventWriter<&File>,
name: &str,
format: Option<TextFormat>,
scope: F,
) -> Result<(), QuizError>
where
F: FnOnce(&mut EventWriter<&File>) -> Result<(), QuizError>,
{
if let Some(format) = format {
writer.write(XmlEvent::start_element(name).attr("format", format.name()))?;
} else {
writer.write(XmlEvent::start_element(name))?;
}
scope(writer)?;
writer.write(XmlEvent::end_element())?;
Ok(())
}