commit 067b744abcf636a6c345b9b0477f6044302b7b03
parent 8b54d3730b0e374e61165e3c7b53ee556f92ce73
Author: triesap <tyson@radroots.org>
Date: Sun, 2 Aug 2026 17:58:51 +0000
build(core): establish the Rust workspace
- add domain, application, storage, Nostr, and FFI crates
- pin the Rust 1.97 toolchain and edition 2024 workspace
- establish the UniFFI bindgen tool package skeleton
- verify all crate and desktop test inventories remain green
Diffstat:
17 files changed, 175 insertions(+), 2 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -3,6 +3,7 @@
.idea/
*.iml
**/build/
+core/target/
out/
local.properties
*.log
diff --git a/core/Cargo.lock b/core/Cargo.lock
@@ -0,0 +1,27 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "radroots-studio-application"
+version = "0.1.0-alpha.0"
+
+[[package]]
+name = "radroots-studio-domain"
+version = "0.1.0-alpha.0"
+
+[[package]]
+name = "radroots-studio-ffi"
+version = "0.1.0-alpha.0"
+
+[[package]]
+name = "radroots-studio-nostr"
+version = "0.1.0-alpha.0"
+
+[[package]]
+name = "radroots-studio-storage"
+version = "0.1.0-alpha.0"
+
+[[package]]
+name = "radroots-studio-uniffi-bindgen"
+version = "0.1.0-alpha.0"
diff --git a/core/Cargo.toml b/core/Cargo.toml
@@ -0,0 +1,24 @@
+[workspace]
+members = [
+ "crates/application",
+ "crates/domain",
+ "crates/ffi",
+ "crates/nostr",
+ "crates/storage",
+ "tools/uniffi-bindgen",
+]
+resolver = "3"
+
+[workspace.package]
+version = "0.1.0-alpha.0"
+edition = "2024"
+rust-version = "1.97"
+license = "GPL-3.0-only"
+repository = "https://github.com/radroots/studio_app"
+
+[workspace.lints.rust]
+unsafe_code = "forbid"
+
+[workspace.lints.clippy]
+all = "deny"
+pedantic = "deny"
diff --git a/core/crates/application/Cargo.toml b/core/crates/application/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "radroots-studio-application"
+version.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+license.workspace = true
+repository.workspace = true
+
+[lints]
+workspace = true
diff --git a/core/crates/application/src/lib.rs b/core/crates/application/src/lib.rs
@@ -0,0 +1,9 @@
+#![doc = "Radroots Studio application runtime."]
+
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn crate_is_available_to_the_workspace() {
+ assert_eq!(env!("CARGO_PKG_NAME"), "radroots-studio-application");
+ }
+}
diff --git a/core/crates/domain/Cargo.toml b/core/crates/domain/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "radroots-studio-domain"
+version.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+license.workspace = true
+repository.workspace = true
+
+[lints]
+workspace = true
diff --git a/core/crates/domain/src/lib.rs b/core/crates/domain/src/lib.rs
@@ -0,0 +1,9 @@
+#![doc = "Radroots Studio Nostr account domain types."]
+
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn crate_is_available_to_the_workspace() {
+ assert_eq!(env!("CARGO_PKG_NAME"), "radroots-studio-domain");
+ }
+}
diff --git a/core/crates/ffi/Cargo.toml b/core/crates/ffi/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "radroots-studio-ffi"
+version.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+license.workspace = true
+repository.workspace = true
+
+[lints]
+workspace = true
diff --git a/core/crates/ffi/src/lib.rs b/core/crates/ffi/src/lib.rs
@@ -0,0 +1,9 @@
+#![doc = "Radroots Studio `UniFFI` boundary."]
+
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn crate_is_available_to_the_workspace() {
+ assert_eq!(env!("CARGO_PKG_NAME"), "radroots-studio-ffi");
+ }
+}
diff --git a/core/crates/nostr/Cargo.toml b/core/crates/nostr/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "radroots-studio-nostr"
+version.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+license.workspace = true
+repository.workspace = true
+
+[lints]
+workspace = true
diff --git a/core/crates/nostr/src/lib.rs b/core/crates/nostr/src/lib.rs
@@ -0,0 +1,9 @@
+#![doc = "Radroots Studio Nostr protocol adapters."]
+
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn crate_is_available_to_the_workspace() {
+ assert_eq!(env!("CARGO_PKG_NAME"), "radroots-studio-nostr");
+ }
+}
diff --git a/core/crates/storage/Cargo.toml b/core/crates/storage/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "radroots-studio-storage"
+version.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+license.workspace = true
+repository.workspace = true
+
+[lints]
+workspace = true
diff --git a/core/crates/storage/src/lib.rs b/core/crates/storage/src/lib.rs
@@ -0,0 +1,9 @@
+#![doc = "Radroots Studio persistence adapters."]
+
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn crate_is_available_to_the_workspace() {
+ assert_eq!(env!("CARGO_PKG_NAME"), "radroots-studio-storage");
+ }
+}
diff --git a/core/rust-toolchain.toml b/core/rust-toolchain.toml
@@ -0,0 +1,4 @@
+[toolchain]
+channel = "1.97.0"
+components = ["clippy", "rustfmt"]
+profile = "minimal"
diff --git a/core/tools/uniffi-bindgen/Cargo.toml b/core/tools/uniffi-bindgen/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "radroots-studio-uniffi-bindgen"
+version.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+license.workspace = true
+repository.workspace = true
+publish = false
+
+[lints]
+workspace = true
diff --git a/core/tools/uniffi-bindgen/src/main.rs b/core/tools/uniffi-bindgen/src/main.rs
@@ -0,0 +1,11 @@
+#![doc = "Pinned `UniFFI` binding generator entry point."]
+
+fn main() {}
+
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn tool_is_available_to_the_workspace() {
+ assert_eq!(env!("CARGO_PKG_NAME"), "radroots-studio-uniffi-bindgen");
+ }
+}
diff --git a/docs/implementation/nostr-runtime-rcld.md b/docs/implementation/nostr-runtime-rcld.md
@@ -263,7 +263,7 @@ checks, documentation link/path validation, and diff review.
### RCLD-02: Rust workspace and domain
-Status: pending.
+Status: in progress.
Scope: checkpoints 2 through 11. Establish the Rust workspace and implement
safe errors, public keys, secret input/redaction, NIP-19 types, relay URLs,
@@ -453,7 +453,7 @@ handoff commit sequence.
### RCLD-02
-- [ ] 02. Establish root Rust workspace skeleton.
+- [x] 02. Establish root Rust workspace skeleton.
- [ ] 03. Add Rust formatting, lint, and governed check hooks. Use Cargo,
Gradle, and Makefile; do not add CI workflows or scripts.
- [ ] 04. Define domain module layout and safe error shell.