diff --git a/Cargo.lock b/Cargo.lock index b3af01d..e5f866b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -334,7 +334,10 @@ name = "autobats" version = "0.1.0" dependencies = [ "bevy", + "dirs", + "include_dir", "rusqlite", + "rusqlite_migration", "steel-core", ] @@ -1812,9 +1815,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" dependencies = [ "iana-time-zone", "num-traits", @@ -2229,6 +2232,27 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + [[package]] name = "dispatch" version = "0.2.0" @@ -2633,6 +2657,17 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "getrandom" version = "0.3.4" @@ -2871,6 +2906,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "hashlink" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.5", +] + [[package]] name = "heapless" version = "0.9.2" @@ -3024,9 +3068,9 @@ dependencies = [ [[package]] name = "im-lists" -version = "0.11.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "952b35313cb20214b270aa12e6d144270cc1c44d29caf207565f2cbeb926db9d" +checksum = "f5a4cae9e7ec36f263968ca5ae4b9fd7d8d108d8ca6a4915481f526f7fa9c787" dependencies = [ "generic_singleton", "smallvec", @@ -3060,6 +3104,25 @@ dependencies = [ "png", ] +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + [[package]] name = "indexmap" version = "1.9.3" @@ -3137,24 +3200,22 @@ checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jiff" -version = "0.2.15" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" dependencies = [ "jiff-static", - "js-sys", "log", "portable-atomic", "portable-atomic-util", - "serde", - "wasm-bindgen", + "serde_core", ] [[package]] name = "jiff-static" -version = "0.2.15" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" dependencies = [ "proc-macro2", "quote", @@ -3189,15 +3250,15 @@ version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.83" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" dependencies = [ "once_cell", "wasm-bindgen", @@ -3284,9 +3345,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.36.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b4103cffefa72eb8428cb6b47d6627161e51c2739fc5e3b734584157bc642a" +checksum = "133c182a6a2c87864fe97778797e46c7e999672690dc9fa3ee8e241aa4a9c13f" dependencies = [ "cc", "pkg-config", @@ -3947,6 +4008,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "orbclient" version = "0.3.50" @@ -4261,7 +4328,7 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "getrandom", + "getrandom 0.3.4", ] [[package]] @@ -4355,6 +4422,17 @@ dependencies = [ "bitflags 2.10.0", ] +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.17", +] + [[package]] name = "regex" version = "1.12.2" @@ -4422,17 +4500,28 @@ checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" [[package]] name = "rusqlite" -version = "0.38.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c93dd1c9683b438c392c492109cb702b8090b2bfc8fed6f6e4eb4523f17af3" +checksum = "165ca6e57b20e1351573e3729b958bc62f0e48025386970b6e4d29e7a7e71f3f" dependencies = [ "bitflags 2.10.0", "fallible-iterator", "fallible-streaming-iterator", + "hashlink", "jiff", "libsqlite3-sys", "smallvec", - "sqlite-wasm-rs", +] + +[[package]] +name = "rusqlite_migration" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fc9767ae49274bafd3e55be9d30405a033b7a59548327d87fd4971fbb58e264" +dependencies = [ + "include_dir", + "log", + "rusqlite", ] [[package]] @@ -4722,19 +4811,6 @@ dependencies = [ "bitflags 2.10.0", ] -[[package]] -name = "sqlite-wasm-rs" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e98301bf8b0540c7de45ecd760539b9c62f5772aed172f08efba597c11cd5d" -dependencies = [ - "cc", - "hashbrown 0.16.1", - "js-sys", - "thiserror 2.0.17", - "wasm-bindgen", -] - [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -4759,7 +4835,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "steel-core" version = "0.7.0" -source = "git+https://github.com/mattwparas/steel.git?branch=master#d0e22af27361612366b15f4436ad133aa770f872" +source = "git+https://github.com/mattwparas/steel.git?branch=master#dd5980a4099afe2af9ce1ae3d8bb30b981294398" dependencies = [ "arc-swap", "bigdecimal", @@ -4774,7 +4850,7 @@ dependencies = [ "futures-executor", "futures-task", "futures-util", - "getrandom", + "getrandom 0.3.4", "glob", "httparse", "icu_casemap", @@ -4809,7 +4885,7 @@ dependencies = [ [[package]] name = "steel-derive" version = "0.6.0" -source = "git+https://github.com/mattwparas/steel.git?branch=master#d0e22af27361612366b15f4436ad133aa770f872" +source = "git+https://github.com/mattwparas/steel.git?branch=master#dd5980a4099afe2af9ce1ae3d8bb30b981294398" dependencies = [ "proc-macro2", "quote", @@ -4819,7 +4895,7 @@ dependencies = [ [[package]] name = "steel-gen" version = "0.3.0" -source = "git+https://github.com/mattwparas/steel.git?branch=master#d0e22af27361612366b15f4436ad133aa770f872" +source = "git+https://github.com/mattwparas/steel.git?branch=master#dd5980a4099afe2af9ce1ae3d8bb30b981294398" dependencies = [ "codegen", "serde", @@ -4828,7 +4904,7 @@ dependencies = [ [[package]] name = "steel-parser" version = "0.7.0" -source = "git+https://github.com/mattwparas/steel.git?branch=master#d0e22af27361612366b15f4436ad133aa770f872" +source = "git+https://github.com/mattwparas/steel.git?branch=master#dd5980a4099afe2af9ce1ae3d8bb30b981294398" dependencies = [ "compact_str", "lasso", @@ -4846,7 +4922,7 @@ dependencies = [ [[package]] name = "steel-quickscope" version = "0.2.0" -source = "git+https://github.com/mattwparas/steel.git?branch=master#d0e22af27361612366b15f4436ad133aa770f872" +source = "git+https://github.com/mattwparas/steel.git?branch=master#dd5980a4099afe2af9ce1ae3d8bb30b981294398" dependencies = [ "indexmap 2.13.0", "smallvec", @@ -5248,7 +5324,7 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ - "getrandom", + "getrandom 0.3.4", "js-sys", "serde_core", "wasm-bindgen", @@ -5300,19 +5376,25 @@ dependencies = [ ] [[package]] -name = "wasip2" -version = "1.0.1+wasi-0.2.4" +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" dependencies = [ "cfg-if", "once_cell", @@ -5323,11 +5405,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.56" +version = "0.4.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" +checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" dependencies = [ "cfg-if", + "futures-util", "js-sys", "once_cell", "wasm-bindgen", @@ -5336,9 +5419,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5346,9 +5429,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" dependencies = [ "bumpalo", "proc-macro2", @@ -5359,9 +5442,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" dependencies = [ "unicode-ident", ] @@ -5482,9 +5565,9 @@ checksum = "323f4da9523e9a669e1eaf9c6e763892769b1d38c623913647bfdc1532fe4549" [[package]] name = "web-sys" -version = "0.3.83" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" dependencies = [ "js-sys", "wasm-bindgen", @@ -6210,9 +6293,9 @@ checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "writeable" diff --git a/Cargo.toml b/Cargo.toml index 1db0fc8..1da681d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,10 @@ edition = "2024" [dependencies] bevy = { version = "0.18", default-features = false, features = ["2d"] } -rusqlite = { version = "0.38", default-features = false, features = ["bundled", "blob", "functions", "jiff"] } +dirs = "6.0.0" +include_dir = "0.7.4" +rusqlite = { version = "0.37", default-features = false, features = ["bundled", "blob", "functions", "jiff"] } +rusqlite_migration = { version = "2.3.0", features = ["from-directory"] } steel-core = { git="https://github.com/mattwparas/steel.git", branch = "master" } # Enable a small amount of optimization in the dev profile. diff --git a/src/db.rs b/src/db.rs new file mode 100644 index 0000000..f92203e --- /dev/null +++ b/src/db.rs @@ -0,0 +1,27 @@ +use std::{path::PathBuf, sync::LazyLock}; + +use include_dir::{include_dir, Dir}; +use rusqlite::{params, Connection}; +use rusqlite_migration::Migrations; + +static MIGRATIONS_DIR: Dir = include_dir!("$CARGO_MANIFEST_DIR/migrations"); + +static MIGRATIONS: LazyLock> = + LazyLock::new(|| Migrations::from_directory(&MIGRATIONS_DIR).unwrap()); + +static ASSETS_DB: LazyLock = LazyLock::new(|| { + dirs::data_dir() + .unwrap_or(".".into()) + .join("autobarts") + .join("assets.db") +}); + +pub fn init_db() -> Result { + let mut conn = Connection::open(&*ASSETS_DB).map_err(|e| format!("oh shit: {e}"))?; + + MIGRATIONS + .to_latest(&mut conn) + .map_err(|e| format!("oh shit: {e}"))?; + + Ok(conn) +} diff --git a/src/main.rs b/src/main.rs index 4b7e3f4..1a5d28d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,8 @@ //! Renders a 2D scene containing a single, moving sprite. - use bevy::prelude::*; +mod db; + fn main() { App::new() .add_plugins(DefaultPlugins)