///|
pub enum ChangeSeverity {
Low
Medium
High
} derive(Debug, Eq)
///|
pub struct ChangeDetail {
section : String
severity : ChangeSeverity
message : String
} derive(Debug, Eq)
///|
fn change_severity(change : ReportChange) -> ChangeSeverity {
match change {
TitleChanged | SummaryChanged => Low
AssumptionsChanged | FormulasChanged | SourcesChanged => Medium
InputsChanged | ResultsChanged | WarningsChanged => High
}
}
///|
pub fn describe_report_changes(
left : ChemReport,
right : ChemReport,
) -> Array[ChangeDetail] {
[
for change in compare_reports(left, right) => {
{
section: change_text(change),
severity: change_severity(change),
message: "report section '{change_text(change)}' changed",
}
}
]
}
///|
pub fn ChangeDetail::is_high_risk(self : ChangeDetail) -> Bool {
self.severity == High
}
///|
pub fn high_risk_changes(changes : Array[ChangeDetail]) -> Array[ChangeDetail] {
[
for change in changes if change.is_high_risk() => change
]
}