workspace: scaffold Cargo workspace with rpn-core and rpn-cli

First code in the repo. Workspace root is Application/ per readme;
members are src/core (crate rpn-core) and src/cli (binary rpnc).
Crate names are prefixed to avoid clashing with the std `core`
crate; directory names follow the readme layout.

Dependencies (versions pinned in Cargo.lock):
- core: sqlx (mysql, runtime-tokio, chrono, rust_decimal), chrono,
  csv, thiserror, serde/serde_json, tracing, plus sha2 (SHA-256
  file checksums required by schema.sql), rust_decimal (exact
  DECIMAL(10,2) money, forced by the "money is DECIMAL
  everywhere" decision), tokio and tempfile as dev deps.
- cli: clap (derive), tokio, tracing-subscriber (env-filter),
  anyhow, serde/serde_json, chrono, csv.

The extra crates beyond the readme stack (sha2, rust_decimal,
tracing-subscriber, tempfile-dev) are direct consequences of
already-committed decisions; flag for maintainer review.

No feature logic yet: rpnc is an empty shell, the domain modules
land in the TDD slices that follow.
This commit is contained in:
2026-09-08 17:56:45 +02:00
parent f3d6580f55
commit e81ef6b351
6 changed files with 2494 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
[package]
name = "rpn-cli"
version = "0.1.0"
publish = false
edition.workspace = true
rust-version.workspace = true
[[bin]]
name = "rpnc"
path = "src/main.rs"
[dependencies]
anyhow = "1.0.104"
chrono = "0.4.45"
clap = { version = "4.6.6", features = ["derive"] }
csv = "1.4.0"
rpn-core = { path = "../core" }
serde = { version = "1.0.229", features = ["derive"] }
serde_json = "1.0.151"
tokio = { version = "1.53.1", features = ["macros", "rt-multi-thread"] }
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
+1
View File
@@ -0,0 +1 @@
fn main() {}
+21
View File
@@ -0,0 +1,21 @@
[package]
name = "rpn-core"
version = "0.1.0"
publish = false
edition.workspace = true
rust-version.workspace = true
[dependencies]
chrono = "0.4.45"
csv = "1.4.0"
rust_decimal = "1.43.0"
serde = { version = "1.0.229", features = ["derive"] }
serde_json = "1.0.151"
sha2 = "0.11.0"
sqlx = { version = "0.8.6", features = ["mysql", "runtime-tokio", "chrono", "rust_decimal"] }
thiserror = "2.0.20"
tracing = "0.1.44"
[dev-dependencies]
tempfile = "3.27.0"
tokio = { version = "1.53.1", features = ["macros", "rt-multi-thread"] }
+1
View File
@@ -0,0 +1 @@
//! Domain logic for RustyRPN: ingest, invoices, Fortnox, car registry.