rustledger-core 0.4.0

Core types for rustledger: Amount, Position, Inventory, and all directive types
Documentation

rustledger-core

Core types for the rustledger Beancount implementation.

Key Types

Type Description
Amount Decimal number with currency (e.g., 100.00 USD)
Position Units held at a specific cost
Inventory Collection of positions with booking support
Cost Acquisition cost of a lot
CostSpec Specification for matching or creating costs
BookingMethod Lot matching strategy (FIFO, LIFO, HIFO, etc.)
Directive All directive types (Transaction, Balance, Open, etc.)

Example

use rustledger_core::{Amount, Cost, Position, Inventory, BookingMethod};
use rust_decimal_macros::dec;
use chrono::NaiveDate;

let mut inv = Inventory::new();

// Add a stock position
let cost = Cost::new(dec!(150.00), "USD")
    .with_date(NaiveDate::from_ymd_opt(2024, 1, 15).unwrap());
inv.add(Position::with_cost(Amount::new(dec!(10), "AAPL"), cost));

// Sell using FIFO
let result = inv.reduce(
    &Amount::new(dec!(-5), "AAPL"),
    None,
    BookingMethod::Fifo,
).unwrap();

assert_eq!(inv.units("AAPL"), dec!(5));

Features

  • rkyv (default) - Enable rkyv serialization for binary caching

License

GPL-3.0