ceb9c950a1
Add [workspace.lints.rust] and wire each member crate up with [lints] workspace = true: unsafe_code = "deny" (forbid would break the Android JNI build) single_use_lifetimes = "warn" trivial_casts = "warn" unused_lifetimes = "warn" unused_qualifications = "warn" variant_size_differences = "warn" unexpected_cfgs = "warn" unsafe_code is "deny" rather than the issue's "forbid" so the three Android JNI FFI modules (android_keystore, android_clipboard, safe_area) can opt back in with a scoped #![allow(unsafe_code)] — forbid cannot be locally overridden. Pure crates carry no unsafe and stay clean. Clean up the warnings the new lints surface: - 150ish unused_qualifications removed via `cargo fix` (purely syntactic redundant-path-prefix removals). - table_plugin: the TABLE_COLOUR import was #[cfg(test)]-gated while the camera clear-colour used the fully-qualified path; unqualifying it left a non-test build with no import. Made the import unconditional instead. - assets/sources: the `as &[u8]` casts in embed_*_svg! coerce each fixed-size &[u8; N] to a uniform slice so the tuples fit the &[(&str, &[u8])] arrays — load-bearing, so scoped #[allow(trivial_casts)]. Workspace clippy -D warnings and the full test suite pass. Android build not compiled here (needs the NDK; built separately per CLAUDE.md §15) — the deny + scoped-allow keeps the JNI unsafe blocks legal. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
58 lines
2.1 KiB
TOML
58 lines
2.1 KiB
TOML
[package]
|
|
name = "solitaire_engine"
|
|
version.workspace = true
|
|
license.workspace = true
|
|
edition.workspace = true
|
|
|
|
[dependencies]
|
|
bevy = { workspace = true }
|
|
image = { workspace = true }
|
|
solitaire_core = { workspace = true }
|
|
solitaire_data = { workspace = true }
|
|
solitaire_sync = { workspace = true }
|
|
chrono = { workspace = true }
|
|
uuid = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
usvg = { workspace = true }
|
|
resvg = { workspace = true }
|
|
tiny-skia = { workspace = true }
|
|
ron = { workspace = true }
|
|
|
|
# These deps are not available / not needed on wasm32:
|
|
# reqwest — uses mio/hyper native networking (sync plugin is gated out)
|
|
# kira — uses cpal OS audio (audio plugin is gated out)
|
|
# tokio — multi-threaded runtime (TokioRuntimeResource is gated out)
|
|
# dirs — platform data directories (storage uses WasmStorage instead)
|
|
# zip — theme ZIP importer (importer is gated out on wasm32)
|
|
# arboard — clipboard (no wasm backend; stats copy-link uses localStorage)
|
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
|
reqwest = { workspace = true }
|
|
kira = { workspace = true }
|
|
tokio = { workspace = true }
|
|
dirs = { workspace = true }
|
|
zip = { workspace = true }
|
|
|
|
# `arboard` has no Android backend and no wasm32 backend. Gate it out for
|
|
# both; the copy-share-link button surfaces an informational toast instead.
|
|
[target.'cfg(all(not(target_os = "android"), not(target_arch = "wasm32")))'.dependencies]
|
|
arboard = { workspace = true }
|
|
|
|
[target.'cfg(target_os = "android")'.dependencies]
|
|
jni = { workspace = true }
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
|
base64 = "0.22"
|
|
getrandom = { version = "0.3", features = ["wasm_js"] }
|
|
wasm-bindgen = "0.2"
|
|
web-sys = { version = "0.3", features = ["Storage", "Window"] }
|
|
|
|
[dev-dependencies]
|
|
async-trait = { workspace = true }
|
|
tempfile = { workspace = true }
|
|
solitaire_core = { workspace = true, features = ["test-support"] }
|
|
|
|
[lints]
|
|
workspace = true
|