Skip to main content

Module error

Module error 

Source
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

  1. Safe composition — handlers and batch jobs can skip one bad input without aborting.
  2. Matchable variantsInvalidRate vs NonFinite vs EmptyInput for metrics and UX.
  3. Display + Error + code — logs, ? into app error types, telemetry keys.
  4. 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§

FinanceError
Domain and input errors from finance calculations.

Type Aliases§

FinanceResult
Result alias for fallible finance functions.