diff --git a/Cargo.lock b/Cargo.lock index 4860c20..996bf33 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -739,6 +739,7 @@ dependencies = [ "flate2", "improvise-core", "improvise-formula", + "improvise-io", "indexmap", "pest", "pest_derive", @@ -775,6 +776,26 @@ dependencies = [ "serde", ] +[[package]] +name = "improvise-io" +version = "0.1.0-rc2" +dependencies = [ + "anyhow", + "chrono", + "csv", + "flate2", + "improvise-core", + "improvise-formula", + "indexmap", + "pest", + "pest_derive", + "pest_meta", + "proptest", + "serde", + "serde_json", + "tempfile", +] + [[package]] name = "indexmap" version = "2.14.0" diff --git a/Cargo.toml b/Cargo.toml index 55b98d2..e90d07f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = [".", "crates/improvise-formula", "crates/improvise-core"] +members = [".", "crates/improvise-formula", "crates/improvise-core", "crates/improvise-io"] [package] name = "improvise" @@ -20,6 +20,7 @@ path = "src/main.rs" [dependencies] improvise-core = { path = "crates/improvise-core" } improvise-formula = { path = "crates/improvise-formula" } +improvise-io = { path = "crates/improvise-io" } ratatui = "0.30" crossterm = "0.29" serde = { version = "1", features = ["derive"] } diff --git a/crates/improvise-io/Cargo.toml b/crates/improvise-io/Cargo.toml new file mode 100644 index 0000000..6366fa1 --- /dev/null +++ b/crates/improvise-io/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "improvise-io" +version = "0.1.0-rc2" +edition = "2024" +description = "Persistence and import for improvise (.improv format, CSV, JSON wizard)" +license = "Apache-2.0" +repository = "https://github.com/fiddlerwoaroof/improvise" + +[dependencies] +improvise-core = { path = "../improvise-core" } +improvise-formula = { path = "../improvise-formula" } +anyhow = "1" +chrono = { version = "0.4", features = ["serde"] } +csv = "1" +flate2 = "1" +indexmap = { version = "2", features = ["serde"] } +pest = "2.8.6" +pest_derive = "2.8.6" +serde = { version = "1", features = ["derive"] } +serde_json = "1" + +[dev-dependencies] +pest_meta = "2.8.6" +proptest = "1" +tempfile = "3" diff --git a/crates/improvise-io/src/lib.rs b/crates/improvise-io/src/lib.rs new file mode 100644 index 0000000..9bdd4fb --- /dev/null +++ b/crates/improvise-io/src/lib.rs @@ -0,0 +1,15 @@ +//! I/O layer for `improvise`: `.improv` persistence (parse/format, save/load, +//! CSV export) and import (CSV/JSON wizard, field analyzer). +//! +//! Depends on `improvise-core` for the data model (`Model`, `View`, +//! `Workbook`, `CellKey`, `CellValue`, `GridLayout`, `Axis`, `Group`) and on +//! `improvise-formula` for formula parsing. Has no awareness of UI or +//! commands — builds standalone via `cargo build -p improvise-io`. +//! +//! Re-exports the core modules under their conventional names so code in +//! this crate can keep using `crate::model::*`, `crate::view::*`, +//! `crate::workbook::*`, `crate::format::*`, and `crate::formula::*` paths. +//! +//! Scaffolded empty in this commit; the modules land in the next commit. +pub use improvise_core::{format, model, view, workbook}; +pub use improvise_formula as formula;