diff --git a/Cargo.lock b/Cargo.lock index 930134ea5..f48cc00f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -230,7 +230,7 @@ dependencies = [ "asn1-rs-impl", "displaydoc", "nom", - "num-traits", + "num-traits 0.2.15", "rusticata-macros", "thiserror", "time 0.3.20", @@ -317,7 +317,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e" dependencies = [ - "num-traits", + "num-traits 0.2.15", ] [[package]] @@ -686,7 +686,7 @@ dependencies = [ "iana-time-zone", "js-sys", "num-integer", - "num-traits", + "num-traits 0.2.15", "time 0.1.45", "wasm-bindgen", "winapi", @@ -1184,7 +1184,7 @@ dependencies = [ "deno_core", "deno_web", "elliptic-curve 0.12.3", - "num-traits", + "num-traits 0.2.15", "once_cell", "p256 0.11.1", "p384 0.11.2", @@ -1345,7 +1345,7 @@ dependencies = [ "base64 0.13.1", "deno_core", "hex", - "num-bigint", + "num-bigint 0.4.3", "rusqlite", "serde", ] @@ -1416,10 +1416,10 @@ dependencies = [ "libz-sys", "md-5", "md4", - "num-bigint", + "num-bigint 0.4.3", "num-bigint-dig", "num-integer", - "num-traits", + "num-traits 0.2.15", "once_cell", "p224", "p256 0.13.2", @@ -1661,8 +1661,8 @@ dependencies = [ "asn1-rs", "displaydoc", "nom", - "num-bigint", - "num-traits", + "num-bigint 0.4.3", + "num-traits 0.2.15", "rusticata-macros", ] @@ -1756,7 +1756,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd4dda8a1b920e8be367aeaad035753d21bb69b3c50515afb41ab1eefbb886b5" dependencies = [ "bumpalo", - "num-bigint", + "num-bigint 0.4.3", "rustc-hash", "swc_atoms", "swc_common", @@ -1773,7 +1773,7 @@ checksum = "b5638f6d17447bc0ffc46354949ee366847e83450e2a07895862942085cc9761" dependencies = [ "digest 0.10.6", "num-bigint-dig", - "num-traits", + "num-traits 0.2.15", "pkcs8 0.10.2", "rfc6979 0.4.0", "sha2", @@ -1941,6 +1941,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "enum_primitive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180" +dependencies = [ + "num-traits 0.1.43", +] + [[package]] name = "err-derive" version = "0.3.1" @@ -3165,6 +3174,7 @@ dependencies = [ "semver 1.0.17", "serde", "serde-aux", + "serde_derive", "serde_json", "sqlx", "sysinfo", @@ -3182,6 +3192,7 @@ dependencies = [ "tracing-error", "tracing-subscriber", "ts-rs", + "unrar", "url", "uuid", "walkdir", @@ -3470,6 +3481,32 @@ dependencies = [ "winapi", ] +[[package]] +name = "num" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" +dependencies = [ + "num-bigint 0.1.44", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits 0.2.15", +] + +[[package]] +name = "num-bigint" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" +dependencies = [ + "num-integer", + "num-traits 0.2.15", + "rand 0.4.6", + "rustc-serialize", +] + [[package]] name = "num-bigint" version = "0.4.3" @@ -3478,7 +3515,7 @@ checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ "autocfg 1.1.0", "num-integer", - "num-traits", + "num-traits 0.2.15", "rand 0.8.5", "serde", ] @@ -3494,13 +3531,23 @@ dependencies = [ "libm", "num-integer", "num-iter", - "num-traits", + "num-traits 0.2.15", "rand 0.8.5", "serde", "smallvec", "zeroize", ] +[[package]] +name = "num-complex" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" +dependencies = [ + "num-traits 0.2.15", + "rustc-serialize", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -3508,7 +3555,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg 1.1.0", - "num-traits", + "num-traits 0.2.15", ] [[package]] @@ -3519,7 +3566,28 @@ checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ "autocfg 1.1.0", "num-integer", - "num-traits", + "num-traits 0.2.15", +] + +[[package]] +name = "num-rational" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" +dependencies = [ + "num-bigint 0.1.44", + "num-integer", + "num-traits 0.2.15", + "rustc-serialize", +] + +[[package]] +name = "num-traits" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" +dependencies = [ + "num-traits 0.2.15", ] [[package]] @@ -3642,7 +3710,7 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" dependencies = [ - "num-traits", + "num-traits 0.2.15", ] [[package]] @@ -4498,7 +4566,7 @@ dependencies = [ "num-bigint-dig", "num-integer", "num-iter", - "num-traits", + "num-traits 0.2.15", "pkcs1", "pkcs8 0.9.0", "rand_core 0.6.4", @@ -4534,6 +4602,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" + [[package]] name = "rustc_version" version = "0.2.3" @@ -4823,9 +4897,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.156" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" dependencies = [ "serde_derive", ] @@ -4862,13 +4936,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.156" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2 1.0.58", "quote 1.0.26", - "syn 1.0.109", + "syn 2.0.16", ] [[package]] @@ -4923,7 +4997,7 @@ checksum = "613ea53a4a3a9abe264072a12989a67cf8988619e189fd5d1220dbe18e366d04" dependencies = [ "bytes", "derive_more", - "num-bigint", + "num-bigint 0.4.3", "serde", "serde_bytes", "smallvec", @@ -5024,8 +5098,8 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ - "num-bigint", - "num-traits", + "num-bigint 0.4.3", + "num-traits 0.2.15", "thiserror", "time 0.3.20", ] @@ -5331,7 +5405,7 @@ dependencies = [ "either", "from_variant", "new_debug_unreachable", - "num-bigint", + "num-bigint 0.4.3", "once_cell", "rustc-hash", "serde", @@ -5379,7 +5453,7 @@ checksum = "b5cf9dd351d0c285dcd36535267953a18995d4dda0cbe34ac9d1df61aa415b26" dependencies = [ "bitflags 2.3.1", "is-macro", - "num-bigint", + "num-bigint 0.4.3", "scoped-tls", "serde", "string_enum", @@ -5395,7 +5469,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66d1ea16bb9b7ea6f87f17325742ff256fcbd65b188af57c2bf415fe4afc945" dependencies = [ "memchr", - "num-bigint", + "num-bigint 0.4.3", "once_cell", "rustc-hash", "serde", @@ -5454,7 +5528,7 @@ checksum = "f0a3fcfe3d83dd445cbd9321882e47b467594433d9a21c4d6c37a27f534bb89e" dependencies = [ "either", "lexical", - "num-bigint", + "num-bigint 0.4.3", "serde", "smallvec", "smartstring", @@ -5601,7 +5675,7 @@ version = "0.90.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce3ac941ae1d6c7e683aa375fc71fbf58df58b441f614d757fbb10554936ca2" dependencies = [ - "num-bigint", + "num-bigint 0.4.3", "swc_atoms", "swc_common", "swc_ecma_ast", @@ -6370,6 +6444,31 @@ dependencies = [ "subtle", ] +[[package]] +name = "unrar" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433cea4f0b7bec88d47becb380887b8786a3cfb1c82e1ef9d32a682ba6801814" +dependencies = [ + "bitflags 1.3.2", + "enum_primitive", + "lazy_static", + "num", + "regex", + "unrar_sys", +] + +[[package]] +name = "unrar_sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0009399408dc0bcc5c8910672544fceceeba18b91f741ff943916e917d982c60" +dependencies = [ + "cc", + "libc", + "winapi", +] + [[package]] name = "untrusted" version = "0.7.1" diff --git a/Cargo.toml b/Cargo.toml index c33d98efe..65fa4b832 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -91,6 +91,8 @@ zip = "0.6.2" openssl = { version = "0.10.45", features = ["vendored"], optional = true } flate2 = "1.0.24" tar = "0.4.38" +unrar = "0.4.4" +serde_derive = "1.0.163" tempfile = "3.5.0" clap = { version = "4.3.0", features = ["derive"] } once_cell = "1.17.1" diff --git a/src/dependency_manager.rs b/src/dependency_manager.rs new file mode 100644 index 000000000..0d421fb00 --- /dev/null +++ b/src/dependency_manager.rs @@ -0,0 +1,81 @@ +use std::collections::HashMap; +use std::fs::File; +use std::io; +use std::io::{ErrorKind}; + +pub enum DependencyManagerError { + Io(io::Error), + Serde(serde_json::Error), + NotFound, +} + +pub struct DependencyManager { + registered_paths: Option>, + file_path: String, +} + +impl DependencyManager { + fn new(file_path: &str) -> DependencyManager { + DependencyManager { + registered_paths: None, + file_path: String::from(file_path), + } + } + + fn save(&self) -> Result<(), DependencyManagerError> { + let file = File::create(&self.file_path); + match file { + Ok(file) => match serde_json::to_writer(file, &self.registered_paths) { + Ok(_) => Ok(()), + Err(e) => Err(DependencyManagerError::Serde(e)) + }, + Err(e) => Err(DependencyManagerError::Io(e)) + } + } + + fn load(&mut self) -> Result<(), DependencyManagerError> { + if self.registered_paths.is_some() { + return Ok(()) + } + + let file = File::open(&self.file_path); + match file { + Ok(file) => { + let dependencies: HashMap = serde_json::from_reader(file).unwrap(); + self.registered_paths = Option::from(dependencies); + Ok(()) + } + Err(error) => match error.kind() { + ErrorKind::NotFound => match File::create(&self.file_path) { + Ok(_) => Ok(()), + Err(e) => Err(DependencyManagerError::Io(e)), + }, + other_error => { + Err(DependencyManagerError::Io(io::Error::from(other_error))) + } + } + } + } + + pub fn register(&mut self, name: String, path: String) -> Result<(), DependencyManagerError> { + self.load()?; + + match self.registered_paths { + Some(ref mut hash_map) => hash_map.insert(name, path), + None => return Ok(()) + }; + self.save() + } + + pub fn get(&mut self, name: &String) -> Result<&str, DependencyManagerError> { + self.load()?; + + match &self.registered_paths { + Some(hash_map) => match hash_map.get::(name) { + Some(path) => Ok(path), + None => Err(DependencyManagerError::NotFound), + }, + None => panic!("No registered paths") + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 5aa756b8f..489536152 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -86,6 +86,7 @@ pub mod tauri_export; mod traits; pub mod types; pub mod util; +mod dependency_manager; #[derive(Clone)] pub struct AppState {