Expand description
Error types and validation for finance calculations.
§API contract (v0.1+)
All public financial computations return FinanceResult — that is,
Result<T, FinanceError>. Invalid rates, non-finite amounts, empty series, and
similar domain failures are values, not panics.
Compose with ? or match on variants for field-level recovery (e.g. highlight
only the rate widget in a UI).
use finance_solution::{future_value, FinanceError, FinanceResult};
fn project(pv: f64, years: u32) -> FinanceResult<f64> {
future_value(0.07, years, pv, false)
}
assert!(project(-5_000.0, 5).is_ok());
match future_value(-1.5, 10, 1_000.0, false) {
Err(FinanceError::InvalidRate { rate }) => assert!(rate < -1.0),
other => panic!("expected InvalidRate, got {other:?}"),
}§Why structured errors
- Safe composition — handlers and batch jobs can skip one bad input without aborting.
- Matchable variants —
InvalidRatevsNonFinitevsEmptyInputfor metrics and UX. Display+Error+code— logs,?into app error types, telemetry keys.- Same formulas — success paths match the historical math; only failure mode changed.
§Stable codes
FinanceError::code returns a snake_case token suitable for metrics (e.g. "invalid_rate").
Enums§
- Finance
Error - Domain and input errors from finance calculations.
Type Aliases§
- Finance
Result - Result alias for fallible finance functions.