Issue #142 / Bilan #4 — TDD step 1. - Added `chrono = "0.4"` (default-features off, `serde` + `std` features) to `src-tauri/Cargo.toml` for day-precision date arithmetic. - New private module `src-tauri/src/commands/return_calculator.rs`: - `pub(crate) fn modified_dietz(value_start, value_end, cash_flows, period_start, period_end) -> AccountReturn` - `AccountReturn { value_start, value_end, net_contributions, return_pct, annualized_pct, is_partial, has_no_transfers_warning }` (Serialize) - Edge cases handled: missing start/end snapshot (`is_partial = true`, `return_pct = None`), no transfers (collapses to simple return + warn flag), zero-length period (skips annualization), V_start = 0 with first flow > 0 (account-created mid-period), depleted-then-refilled (no panic, finite output). - 7 co-located TDD tests covering nominal + every edge case above. - Module declared `pub(crate)` in `commands/mod.rs` (kept out of the wildcard re-export — only `balance_commands.rs` will consume it). `cargo test --lib commands::return_calculator` → 7 passed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
66 lines
2.5 KiB
TOML
66 lines
2.5 KiB
TOML
[package]
|
|
name = "simpl-result"
|
|
version = "0.8.4"
|
|
description = "Personal finance management app"
|
|
license = "GPL-3.0-only"
|
|
authors = ["you"]
|
|
edition = "2021"
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[lib]
|
|
# The `_lib` suffix may seem redundant but it is necessary
|
|
# to make the lib name unique and wouldn't conflict with the bin name.
|
|
# This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
|
|
name = "simpl_result_lib"
|
|
crate-type = ["staticlib", "cdylib", "rlib"]
|
|
|
|
[build-dependencies]
|
|
tauri-build = { version = "2", features = [] }
|
|
|
|
[dependencies]
|
|
tauri = { version = "2", features = [] }
|
|
tauri-plugin-opener = "2"
|
|
tauri-plugin-sql = { version = "2", features = ["sqlite"] }
|
|
tauri-plugin-dialog = "2"
|
|
tauri-plugin-updater = "2"
|
|
tauri-plugin-process = "2"
|
|
tauri-plugin-deep-link = "2"
|
|
tauri-plugin-single-instance = { version = "2", features = ["deep-link"] }
|
|
libsqlite3-sys = { version = "0.30", features = ["bundled"] }
|
|
rusqlite = { version = "0.32", features = ["bundled"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
sha2 = "0.10"
|
|
encoding_rs = "0.8"
|
|
walkdir = "2"
|
|
aes-gcm = "0.10"
|
|
argon2 = "0.5"
|
|
subtle = "2"
|
|
rand = "0.8"
|
|
jsonwebtoken = "9"
|
|
machine-uid = "0.5"
|
|
reqwest = { version = "0.12", features = ["json"] }
|
|
# Date arithmetic for the Modified Dietz return calculator (Issue #142):
|
|
# we need day-precision diffs to weight cash flows W_i = (T - t_i) / T.
|
|
# `serde` feature lets `NaiveDate` cross the Tauri command boundary in JSON.
|
|
chrono = { version = "0.4", default-features = false, features = ["serde", "std"] }
|
|
tokio = { version = "1", features = ["macros"] }
|
|
hostname = "0.4"
|
|
urlencoding = "2"
|
|
base64 = "0.22"
|
|
# OAuth token storage in OS keychain (Credential Manager on Windows,
|
|
# Secret Service on Linux). We use sync-secret-service to get sync
|
|
# methods that are safe to call from async Tauri commands without
|
|
# tokio runtime entanglement. Requires libdbus-1-dev at build time
|
|
# on Linux (libdbus-1-3 is present on every desktop Linux at runtime).
|
|
keyring = { version = "3.6", default-features = false, features = ["sync-secret-service", "crypto-rust", "windows-native"] }
|
|
zeroize = "1"
|
|
hmac = "0.12"
|
|
|
|
[dev-dependencies]
|
|
# Used in license_commands.rs tests to sign test JWTs. We avoid the `pem`
|
|
# feature because the `LineEnding` re-export path varies between versions
|
|
# of pkcs8/spki; building the PKCS#8 DER manually is stable and trivial
|
|
# for Ed25519.
|
|
ed25519-dalek = { version = "2", features = ["pkcs8", "rand_core"] }
|