use crate::reading::{report::ReadingReport, section::ReadingSection};
use crate::rules::Claim;
use thiserror::Error;
pub trait ReportRenderer {
fn render(&self, claims: &[Claim]) -> Result<ReadingReport, RenderError>;
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct PlaceholderRenderer;
impl ReportRenderer for PlaceholderRenderer {
fn render(&self, claims: &[Claim]) -> Result<ReadingReport, RenderError> {
let sections = claims
.iter()
.map(|claim| {
let themes = if claim.themes().is_empty() {
"no themes".to_owned()
} else {
claim.themes().join(", ")
};
ReadingSection::new(
claim.domain(),
format!("{:?}", claim.domain()),
format!("Placeholder reading for themes: {themes}."),
)
})
.collect();
Ok(ReadingReport::new(sections))
}
}
#[derive(Debug, Error, Eq, PartialEq)]
pub enum RenderError {
#[error("report rendering is not implemented")]
NotImplemented,
}