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:
Generated
+2443
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
[workspace]
|
||||
resolver = "3"
|
||||
members = ["src/core", "src/cli"]
|
||||
|
||||
[workspace.package]
|
||||
edition = "2024"
|
||||
rust-version = "1.85"
|
||||
@@ -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"] }
|
||||
@@ -0,0 +1 @@
|
||||
fn main() {}
|
||||
@@ -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"] }
|
||||
@@ -0,0 +1 @@
|
||||
//! Domain logic for RustyRPN: ingest, invoices, Fortnox, car registry.
|
||||
Reference in New Issue
Block a user