corp-finance-core 1.1.0

Institutional-grade corporate finance calculations with 128-bit decimal precision — DCF, WACC, comps, LBO, credit metrics, derivatives, fixed income, options, and 60+ specialty modules. No f64 in financials. WASM-compatible.
Documentation
use rust_decimal::Decimal;
use thiserror::Error;

#[derive(Debug, Error)]
pub enum CorpFinanceError {
    #[error("Invalid input: {field} — {reason}")]
    InvalidInput { field: String, reason: String },

    #[error("Financial impossibility: {0}")]
    FinancialImpossibility(String),

    #[error("Convergence failure: {function} did not converge after {iterations} iterations (delta: {last_delta})")]
    ConvergenceFailure {
        function: String,
        iterations: u32,
        last_delta: Decimal,
    },

    #[error("Insufficient data: {0}")]
    InsufficientData(String),

    #[error("Division by zero in {context}")]
    DivisionByZero { context: String },

    #[error("Date error: {0}")]
    DateError(String),

    #[error("Serialization error: {0}")]
    SerializationError(String),
}

impl From<serde_json::Error> for CorpFinanceError {
    fn from(e: serde_json::Error) -> Self {
        CorpFinanceError::SerializationError(e.to_string())
    }
}

impl From<String> for CorpFinanceError {
    fn from(msg: String) -> Self {
        CorpFinanceError::SerializationError(msg)
    }
}