From 5e480a5f74ae7b29d03436b5233724a691cf05a8 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sat, 18 Apr 2026 05:40:49 -0700 Subject: [PATCH] Carry finance news candidates in service events --- crates/rrt-runtime/src/step.rs | 37 ++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/crates/rrt-runtime/src/step.rs b/crates/rrt-runtime/src/step.rs index 789c5d0..35bc282 100644 --- a/crates/rrt-runtime/src/step.rs +++ b/crates/rrt-runtime/src/step.rs @@ -1,3 +1,4 @@ +use std::collections::BTreeMap; use std::collections::BTreeSet; use serde::{Deserialize, Serialize}; @@ -70,6 +71,8 @@ pub struct ServiceEvent { pub activated_record_ids: Vec, pub deactivated_record_ids: Vec, pub removed_record_ids: Vec, + #[serde(default)] + pub finance_news_family_candidates: BTreeMap, pub dirty_rerun: bool, } @@ -512,6 +515,7 @@ fn service_company_annual_finance_policy( let mut mutated_company_ids = BTreeSet::new(); let mut applied_effect_count = 0u32; + let mut finance_news_family_candidates = BTreeMap::new(); for company_id in active_company_ids { let Some(policy_state) = runtime_company_annual_finance_policy_state(state, company_id) @@ -574,6 +578,7 @@ fn service_company_annual_finance_policy( .service_state .annual_finance_last_news_family_candidates .insert(company_id, label.to_string()); + finance_news_family_candidates.insert(company_id, label.to_string()); } applied_effect_count += 1; mutated_company_ids.insert(company_id); @@ -658,6 +663,7 @@ fn service_company_annual_finance_policy( .service_state .annual_finance_last_news_family_candidates .insert(company_id, label.to_string()); + finance_news_family_candidates.insert(company_id, label.to_string()); } applied_effect_count += 1; mutated_company_ids.insert(company_id); @@ -817,6 +823,7 @@ fn service_company_annual_finance_policy( .service_state .annual_finance_last_news_family_candidates .insert(company_id, label.to_string()); + finance_news_family_candidates.insert(company_id, label.to_string()); } applied_effect_count += 1; mutated_company_ids.insert(company_id); @@ -906,6 +913,7 @@ fn service_company_annual_finance_policy( .service_state .annual_finance_last_news_family_candidates .insert(company_id, label.to_string()); + finance_news_family_candidates.insert(company_id, label.to_string()); } applied_effect_count += 1; mutated_company_ids.insert(company_id); @@ -926,6 +934,7 @@ fn service_company_annual_finance_policy( activated_record_ids: Vec::new(), deactivated_record_ids: Vec::new(), removed_record_ids: Vec::new(), + finance_news_family_candidates, dirty_rerun: false, }); @@ -1030,6 +1039,7 @@ fn service_trigger_kind( activated_record_ids, deactivated_record_ids, removed_record_ids, + finance_news_family_candidates: BTreeMap::new(), dirty_rerun, }); @@ -2825,7 +2835,8 @@ mod tests { .iter() .any(|event| event.kind == "annual_finance_policy" && event.applied_effect_count == 1 - && event.mutated_company_ids == vec![21]) + && event.mutated_company_ids == vec![21] + && event.finance_news_family_candidates.is_empty()) ); } @@ -3008,7 +3019,8 @@ mod tests { .iter() .any(|event| event.kind == "annual_finance_policy" && event.applied_effect_count == 1 - && event.mutated_company_ids == vec![22]) + && event.mutated_company_ids == vec![22] + && event.finance_news_family_candidates.get(&22) == Some(&"4053".to_string())) ); } @@ -3167,7 +3179,8 @@ mod tests { .iter() .any(|event| event.kind == "annual_finance_policy" && event.applied_effect_count == 1 - && event.mutated_company_ids == vec![23]) + && event.mutated_company_ids == vec![23] + && event.finance_news_family_candidates.get(&23) == Some(&"2887".to_string())) ); } @@ -3310,7 +3323,9 @@ mod tests { .iter() .any(|event| event.kind == "annual_finance_policy" && event.applied_effect_count == 1 - && event.mutated_company_ids == vec![24]) + && event.mutated_company_ids == vec![24] + && event.finance_news_family_candidates.get(&24) + == Some(&"2882_2886".to_string())) ); } @@ -3471,7 +3486,9 @@ mod tests { .iter() .any(|event| event.kind == "annual_finance_policy" && event.applied_effect_count == 1 - && event.mutated_company_ids == vec![25]) + && event.mutated_company_ids == vec![25] + && event.finance_news_family_candidates.get(&25) + == Some(&"2882_2886".to_string())) ); } @@ -3645,7 +3662,9 @@ mod tests { .iter() .any(|event| event.kind == "annual_finance_policy" && event.applied_effect_count == 1 - && event.mutated_company_ids == vec![26]) + && event.mutated_company_ids == vec![26] + && event.finance_news_family_candidates.get(&26) + == Some(&"2882_2886".to_string())) ); } @@ -3823,7 +3842,8 @@ mod tests { .iter() .any(|event| event.kind == "annual_finance_policy" && event.applied_effect_count == 1 - && event.mutated_company_ids == vec![31]) + && event.mutated_company_ids == vec![31] + && event.finance_news_family_candidates.get(&31) == Some(&"2881".to_string())) ); } @@ -3998,7 +4018,8 @@ mod tests { .iter() .any(|event| event.kind == "annual_finance_policy" && event.applied_effect_count == 1 - && event.mutated_company_ids == vec![32]) + && event.mutated_company_ids == vec![32] + && event.finance_news_family_candidates.get(&32) == Some(&"2881".to_string())) ); }