diff --git a/rs/Cargo.lock b/rs/Cargo.lock index 2d57a19..09d8af9 100644 --- a/rs/Cargo.lock +++ b/rs/Cargo.lock @@ -335,12 +335,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bincode" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6a120d2e16b3e1b4a24bd70f23b12d3e16b81f113364a26935f8db7245452d" - [[package]] name = "bindgen" version = "0.70.1" @@ -407,6 +401,29 @@ version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +[[package]] +name = "bytecheck" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0caa33a2c0edca0419d15ac723dff03f1956f7978329b1e3b5fdaaaed9d3ca8b" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "rancor", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "bytemuck" version = "1.22.0" @@ -949,6 +966,12 @@ version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + [[package]] name = "heck" version = "0.5.0" @@ -1130,7 +1153,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.2", ] [[package]] @@ -1343,6 +1366,26 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "munge" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c" +dependencies = [ + "munge_macro", +] + +[[package]] +name = "munge_macro" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "ndk" version = "0.8.0" @@ -1527,7 +1570,6 @@ version = "0.1.0" dependencies = [ "actix-web", "assert_matches", - "bincode", "clap", "env_logger", "factori", @@ -1536,6 +1578,7 @@ dependencies = [ "once_cell", "rand", "regex", + "rkyv", "rodio", "serde", "serde_json", @@ -1610,6 +1653,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "ptr_meta" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "quote" version = "1.0.40" @@ -1625,6 +1688,15 @@ version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +[[package]] +name = "rancor" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" +dependencies = [ + "ptr_meta", +] + [[package]] name = "rand" version = "0.9.0" @@ -1708,6 +1780,45 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "rend" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "rkyv" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360b333c61ae24e5af3ae7c8660bd6b21ccd8200dbbc5d33c2454421e85b9c69" +dependencies = [ + "bytecheck", + "bytes", + "hashbrown 0.16.1", + "indexmap", + "munge", + "ptr_meta", + "rancor", + "rend", + "rkyv_derive", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02f8cdd12b307ab69fe0acf4cd2249c7460eb89dce64a0febadf934ebb6a9e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "rodio" version = "0.20.1" @@ -1867,6 +1978,12 @@ dependencies = [ "libc", ] +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "slab" version = "0.4.9" @@ -2159,6 +2276,21 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" version = "1.44.1" @@ -2285,6 +2417,16 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "version_check" version = "0.9.5" diff --git a/rs/Cargo.toml b/rs/Cargo.toml index 59497b3..1f910a1 100644 --- a/rs/Cargo.toml +++ b/rs/Cargo.toml @@ -8,7 +8,6 @@ edition = "2021" [dependencies] actix-web = "^4" -bincode = "^3" clap = { version = "^4", features = ["derive"] } env_logger = "^0" log = "^0" @@ -23,6 +22,7 @@ rand = "^0" regex = "^1" lazy_static = "^1" once_cell = "^1" +rkyv = "^0.8" [dev-dependencies] assert_matches = "^1" diff --git a/rs/src/filemanager/cache.rs b/rs/src/filemanager/cache.rs index d45e09f..2323384 100644 --- a/rs/src/filemanager/cache.rs +++ b/rs/src/filemanager/cache.rs @@ -1,4 +1,5 @@ -use serde::{Deserialize, Serialize}; +use rkyv::from_bytes; +use rkyv::{rancor::Error, Archive, Deserialize, Serialize}; use std::collections::{hash_map::DefaultHasher, HashSet}; use std::fs; use std::hash::{Hash, Hasher}; @@ -11,7 +12,7 @@ use super::options::CollectionOptions; static DB_ROOT_PATH: &str = ".cache"; const DEFAULT_IGNORES: [&str; 2] = ["Music", "Audio Music Apps"]; -#[derive(Serialize, Deserialize, Debug)] +#[derive(Serialize, Deserialize, Debug, Archive)] struct File { path: String, id: String, @@ -84,8 +85,9 @@ fn db_to_files(db: sled::Db) -> Vec { } fn deserialize(bytes: &[u8]) -> File { - let decoded: File = bincode::deserialize(bytes).unwrap(); - decoded + //let decoded: File = bincode::deserialize(bytes).unwrap(); + let deserialized: File = from_bytes::(bytes).unwrap(); + deserialized } fn serialize(path: PathBuf, id: String) -> Vec { @@ -93,7 +95,8 @@ fn serialize(path: PathBuf, id: String) -> Vec { path: path.to_str().unwrap().to_string(), id, }; - bincode::serialize(&file).unwrap() + //bincode::serialize(&file).unwrap() + rkyv::to_bytes::(&file).unwrap().into_vec() } fn walk_dirs(dir: String, db: &mut sled::Db, ignores: HashSet) { @@ -116,7 +119,7 @@ fn walk_dirs(dir: String, db: &mut sled::Db, ignores: HashSet) { let encoded = serialize(path, id); db.insert(i.to_be_bytes(), encoded).unwrap(); i += 1; - if i % 500 == 0 { + if i.is_multiple_of(500) { log::info!("{}", i); } }