///|
pub(all) enum RoutineStatus {
Planned
AwaitingModel
Validating
Persisted
Failed(String)
} derive(Debug, Eq, ToJson, FromJson)
///|
pub(all) struct AnalysisRecord {
run_id : RunId
snapshot : KlineSnapshot
stage1 : Stage1Diagnosis?
stage2 : Stage2Decision?
validation : Array[ValidationReport]
status : RoutineStatus
} derive(Debug, Eq, ToJson, FromJson)
///|
pub fn empty_analysis_record(
run_id : RunId,
snapshot : KlineSnapshot,
) -> AnalysisRecord {
{
run_id,
snapshot,
stage1: None,
stage2: None,
validation: [],
status: Planned,
}
}
///|
pub fn AnalysisRecord::with_stage1(
self : AnalysisRecord,
stage1 : Stage1Diagnosis,
) -> AnalysisRecord {
{ ..self, stage1: Some(stage1), status: Validating }
}
///|
pub fn AnalysisRecord::with_stage2(
self : AnalysisRecord,
stage2 : Stage2Decision,
) -> AnalysisRecord {
{ ..self, stage2: Some(stage2), status: Validating }
}
///|
pub fn AnalysisRecord::with_validation(
self : AnalysisRecord,
report : ValidationReport,
) -> AnalysisRecord {
let validation = self.validation.copy()
validation.push(report)
{ ..self, validation, }
}
///|
pub fn AnalysisRecord::persisted(self : AnalysisRecord) -> AnalysisRecord {
{ ..self, status: Persisted }
}