diff options
| author | Joe Carstairs <me@joeac.net> | 2024-11-30 22:26:18 +0000 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2024-11-30 22:28:40 +0000 |
| commit | 283475af457c71db280fe7732218450a3163614b (patch) | |
| tree | 7bd0d5b25f1a672743d559887108da685fa3f735 /rust | |
| parent | 19f03fd78f40923406e6282d210483c62725401a (diff) | |
Transforms budget drips with unique IDs across a single AB zero budget
Diffstat (limited to 'rust')
| -rw-r--r-- | rust/actualbudget_to_schist_transformer/src/transform_state/transform_budget_drips.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/rust/actualbudget_to_schist_transformer/src/transform_state/transform_budget_drips.rs b/rust/actualbudget_to_schist_transformer/src/transform_state/transform_budget_drips.rs index 2e9125b..7ec41af 100644 --- a/rust/actualbudget_to_schist_transformer/src/transform_state/transform_budget_drips.rs +++ b/rust/actualbudget_to_schist_transformer/src/transform_state/transform_budget_drips.rs @@ -1,3 +1,5 @@ +use std::hash::{DefaultHasher, Hash, Hasher}; + use actualbudget_models::ActualbudgetZeroBudget; use anyhow::{Context, Result}; use itertools::Itertools; @@ -46,7 +48,7 @@ fn map_actualbudget_zero_budget_to_budget_drips( let budget_drips: Vec<BudgetDrip> = days_in_month.iter().map(|&date| BudgetDrip { - id: transform_id(&actualbudget_zero_budget.id), + id: transform_budget_drip_id(&actualbudget_zero_budget, &date), category_id: transform_id(&actualbudget_zero_budget.category_id), date, quantity: if date == first_day_of_month { @@ -85,6 +87,18 @@ fn group_actualbudget_zero_budgets_by_category_id( ).collect() } +fn transform_budget_drip_id( + actualbudget_zero_budget: &ActualbudgetZeroBudget, + date: &DateUtc, +) -> i32 { + let mut hasher = DefaultHasher::new(); + let unique_str = actualbudget_zero_budget.id.clone() + date.to_string().as_str(); + unique_str.hash(&mut hasher); + (hasher.finish() % std::convert::TryInto::<u64>::try_into(i32::MAX).unwrap()) + .try_into() + .unwrap() +} + #[cfg(test)] mod test { use actualbudget_fakes::actualbudget_zero_budget::make_fake_actualbudget_zero_budget_builder; |
