diff --git a/Cargo.lock b/Cargo.lock index 7d57830..2701ca5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -34,6 +34,15 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -55,6 +64,45 @@ dependencies = [ "vec_map", ] +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.12" @@ -131,6 +179,7 @@ dependencies = [ "include_dir", "once_cell", "rand", + "rust-embed", "serde", "serde_json", ] @@ -195,12 +244,55 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rust-embed" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb78f46d0066053d16d4ca7b898e9343bc3530f71c61d5ad84cd404ada068745" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91ac2a3c6c0520a3fb3dd89321177c3c692937c4eb21893378219da10c44fc8" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.55", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f69089032567ffff4eada41c573fc43ff466c7db7c5688b2e7969584345581" +dependencies = [ + "sha2", + "walkdir", +] + [[package]] name = "ryu" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "serde" version = "1.0.197" @@ -232,6 +324,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "strsim" version = "0.8.0" @@ -269,6 +372,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + [[package]] name = "unicode-ident" version = "1.0.12" @@ -287,6 +396,22 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -309,6 +434,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 3d6042d..7efcde5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,4 @@ serde_json = "1.0" once_cell = "1.8.0" clap = { version = "2" } include_dir = "0.6.0" +rust-embed = "8.3.0" diff --git a/README.md b/README.md index 9809a10..9ff8847 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,18 @@ # PokeRust A simple colorscript written in Rust. + +Inspired by [phoneybadger's pokemon-coloscripts](https://gitlab.com/phoneybadger/pokemon-colorscripts) + +*For educational purposes* + +## Performance + +This is written in Rust, while the original is written in Python. +This implementation is up to 8 times faster than the original. + +This is the Python implementation: +![python implementation](img/screenshot_250324_132129.png) + +This is the Rust implementation: +![rust implementation](img/screenshot_250324_132205.png) diff --git a/img/screenshot_250324_132129.png b/img/screenshot_250324_132129.png new file mode 100644 index 0000000..6d7ccba Binary files /dev/null and b/img/screenshot_250324_132129.png differ diff --git a/img/screenshot_250324_132205.png b/img/screenshot_250324_132205.png new file mode 100644 index 0000000..f647053 Binary files /dev/null and b/img/screenshot_250324_132205.png differ diff --git a/src/main.rs b/src/main.rs index d804926..ffbf6cf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,9 @@ use rand::Rng; // set global constants -const COLORSCRIPTS_DIR: include_dir::Dir = include_dir::include_dir!("./colorscripts"); +#[derive(rust_embed::RustEmbed)] +#[folder = "colorscripts/"] +pub struct ColorScriptsDir; const POKEMON_JSON: &str = std::include_str!("../pokemon.json"); @@ -25,8 +27,8 @@ const GENERATIONS: [(&str, (u32, u32)); 8] = [ ]; fn print_file(filepath: &str) -> std::io::Result<()> { - if let Some(file) = COLORSCRIPTS_DIR.get_file(filepath) { - let content = std::str::from_utf8(file.contents()).unwrap(); + if let Some(file) = ColorScriptsDir::get(filepath) { + let content = std::str::from_utf8(file.data.as_ref()).unwrap(); println!("{}", content); Ok(()) } else {