///|
pub enum ReportFormat {
Markdown
Html
Json
} derive(Debug, Eq)
///|
pub enum RenderError {
InvalidReport
EmptyOutput
} derive(Debug, Eq)
///|
pub struct RenderedReport {
format : ReportFormat
content : String
} derive(Debug, Eq)
///|
pub fn render_report(
report : ChemReport,
format : ReportFormat,
) -> Result[RenderedReport, RenderError] {
if report.has_blocking_issue() {
return Err(InvalidReport)
}
let content = match format {
Markdown => report.to_markdown()
Html => report.to_html_document()
Json => report.to_json()
}
if content == "" {
Err(EmptyOutput)
} else {
Ok({ format, content })
}
}
///|
pub fn report_formats() -> Array[ReportFormat] {
[Markdown, Html, Json]
}
///|
pub fn RenderedReport::is_nonempty(self : RenderedReport) -> Bool {
self.content.trim() != ""
}