diff --git a/Cargo.lock b/Cargo.lock index e7ee688..a9a6880 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,6 +14,12 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "cc" version = "1.2.15" @@ -235,6 +241,15 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy 0.7.35", +] + [[package]] name = "proc-macro2" version = "1.0.93" @@ -253,6 +268,37 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha", + "rand_core", + "zerocopy 0.8.20", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c" +dependencies = [ + "getrandom", + "zerocopy 0.8.20", +] + [[package]] name = "rustix" version = "0.38.44" @@ -331,6 +377,7 @@ version = "0.1.0" dependencies = [ "cxx", "cxx-build", + "rand", "system-deps", "tempfile", ] @@ -548,3 +595,44 @@ checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ "bitflags", ] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" +dependencies = [ + "zerocopy-derive 0.8.20", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index aac59a9..af1f22c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" [dependencies] cxx = "1.0.141" +rand = "0.9.0" [build-dependencies] cxx-build = "1.0.141" diff --git a/src/cxx/mod.rs b/src/cxx/mod.rs index 26e18da..b80c16a 100644 --- a/src/cxx/mod.rs +++ b/src/cxx/mod.rs @@ -5,14 +5,16 @@ pub mod ffi { include!("sword_rs/src/cxx/module.h"); type Mgr; - type Module; fn new_mgr() -> UniquePtr; fn new_mgr_with_path(path: &String) -> UniquePtr; fn get_modules(self: &Mgr) -> Vec; fn get_module(self: Pin<&mut Mgr>, name: &String) -> UniquePtr; + type Module; + fn get_name(self: &Module) -> String; + fn set_key_text(self: Pin<&mut Module>, key_text: &String) -> (); fn strip_text(self: Pin<&mut Module>) -> String; } } diff --git a/src/cxx/module.h b/src/cxx/module.h index 9a852d4..9dea142 100644 --- a/src/cxx/module.h +++ b/src/cxx/module.h @@ -20,4 +20,8 @@ class Module { (const char*) this->module->stripText() ); } + + void set_key_text(const rust::String& keyText) { + this->module->setKeyText(std::string(keyText).c_str()); + } }; diff --git a/src/main.rs b/src/main.rs index e02de51..525b883 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +use rand::Rng; use sword_rs::mgr::Mgr; fn main() { @@ -5,6 +6,13 @@ fn main() { for mod_name in mgr.get_modules() { let mut module = mgr.get_module(&mod_name); println!("Module: {}", module.get_name()); - println!("Text: {}", module.strip_text()); + let random_number: i32 = rand::rng().gen_range(1..=20); + let random_number_str = format!("John.3.{}", random_number); + module.set_key_text(&random_number_str); + println!( + "Text John 3:{} is \"{}\"", + random_number, + module.strip_text() + ); } } diff --git a/src/module.rs b/src/module.rs index 1f46705..70aef8a 100644 --- a/src/module.rs +++ b/src/module.rs @@ -17,4 +17,8 @@ impl Module { pub fn strip_text(&mut self) -> String { self.module.pin_mut().strip_text() } + + pub fn set_key_text(&mut self, key_text: &String) { + self.module.pin_mut().set_key_text(key_text); + } }