rust-fintech

📁 peixotorms/odinlayer-skills 📅 4 days ago
1
总安装量
1
周安装量
#54329
全站排名
安装命令
npx skills add https://github.com/peixotorms/odinlayer-skills --skill rust-fintech

Agent 安装分布

amp 1
opencode 1
kimi-cli 1
codex 1
github-copilot 1
claude-code 1

Skill 文档

FinTech Development

Domain Constraints

Domain Rule Design Constraint Rust Implication
Audit trail Immutable records Arc, no mutation
Precision No floating point rust_decimal
Consistency Transaction boundaries Clear ownership
Compliance Complete logging Structured tracing
Reproducibility Deterministic execution No race conditions

Critical Rules

  • Never use f64 for money — floating point loses precision. Use rust_decimal::Decimal.
  • All transactions must be immutable and traceable — regulatory compliance requires event sourcing.
  • Money can’t disappear or appear — double-entry accounting with validated totals.

Key Crates

Purpose Crate
Decimal math rust_decimal
Date/time chrono, time
UUID uuid
Serialization serde
Validation validator

Currency Type Pattern

use rust_decimal::Decimal;

#[derive(Clone, Debug, PartialEq)]
pub struct Amount {
    value: Decimal,
    currency: Currency,
}

impl Amount {
    pub fn new(value: Decimal, currency: Currency) -> Self {
        Self { value, currency }
    }

    pub fn add(&self, other: &Amount) -> Result<Amount, CurrencyMismatch> {
        if self.currency != other.currency {
            return Err(CurrencyMismatch);
        }
        Ok(Amount::new(self.value + other.value, self.currency))
    }
}

Design Patterns

Pattern Purpose Implementation
Currency newtype Type safety struct Amount(Decimal);
Transaction Atomic operations Event sourcing
Audit log Traceability Structured logging with trace IDs
Ledger Double-entry Debit/credit balance

Common Mistakes

Mistake Domain Violation Fix
Using f64 Precision loss rust_decimal
Mutable transaction Audit trail broken Immutable + events
String for amount No validation Validated newtype
Silent overflow Money disappears Checked arithmetic