Skip to main content

budget_tracking/
budget_tracking.rs

1use conservation_checker::{ConservationChecker, Phase};
2
3fn main() {
4    let mut budget = ConservationChecker::new();
5
6    // Monthly budget: $5000, we allow going $100 over as a buffer
7    budget.register("monthly_budget", 5000.0, 100.0);
8
9    let expenses = [1200.0, 800.0, 1500.0, 900.0, 700.0, 350.0];
10
11    for (i, expense) in expenses.iter().enumerate() {
12        let remaining = budget.current_value("monthly_budget") - expense;
13        budget.update("monthly_budget", remaining);
14        budget.snapshot();
15
16        let phase = budget.phase("monthly_budget");
17        let drift = budget.drift_rate("monthly_budget");
18
19        println!(
20            "Day {}: spent ${:.0}, remaining ${:.0} | phase={:?}, drift={:.1}/day",
21            i + 1,
22            expense,
23            remaining,
24            phase,
25            drift,
26        );
27
28        if phase == Phase::Transitioning {
29            println!("  ⚠️  Budget is depleting fast!");
30        }
31    }
32
33    if !budget.is_conserved("monthly_budget") {
34        println!("\n❌ Budget violated! Over by ${:.0}", 
35                 budget.initial_value("monthly_budget") - budget.current_value("monthly_budget"));
36        println!("   Violations: {:?}", budget.violations());
37    } else {
38        println!("\n✅ Budget intact with ${:.0} remaining", budget.current_value("monthly_budget"));
39    }
40}