summaryrefslogtreecommitdiff
path: root/src/script.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/script.rs')
-rw-r--r--src/script.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/script.rs b/src/script.rs
new file mode 100644
index 0000000..0de2b54
--- /dev/null
+++ b/src/script.rs
@@ -0,0 +1,44 @@
+use crate::ScriptContext;
+
+mod tortuise {
+ #[link(wasm_import_module = "tortuise")]
+ unsafe extern "C" {
+ pub unsafe fn script_id_by_name(context: u64, name: *const u8, length: usize) -> usize;
+ pub safe fn preload_script(context: u64, id: usize);
+ pub safe fn is_script_loaded(context: u64, id: usize) -> u32;
+ pub safe fn unload_script(context: u64, id: usize);
+ pub safe fn activate_script(context: u64, id: usize);
+ pub safe fn deactivate_script(context: u64, id: usize);
+ }
+}
+
+impl ScriptContext {
+ pub fn script_id(&self, name: &str) -> usize {
+ unsafe { tortuise::script_id_by_name(self.0, name.as_ptr(), name.len()) }
+ }
+
+ pub fn preload_script(&self, name: &str) {
+ let id = self.script_id(name);
+ tortuise::preload_script(self.0, id)
+ }
+
+ pub fn is_script_loaded(&self, name: &str) -> bool {
+ let id = self.script_id(name);
+ tortuise::is_script_loaded(self.0, id) > 0
+ }
+
+ pub fn unload_script(&self, name: &str) {
+ let id = self.script_id(name);
+ tortuise::unload_script(self.0, id)
+ }
+
+ pub fn activate_script(&self, name: &str) {
+ let id = self.script_id(name);
+ tortuise::activate_script(self.0, id)
+ }
+
+ pub fn deactivate_script(&self, name: &str) {
+ let id = self.script_id(name);
+ tortuise::deactivate_script(self.0, id)
+ }
+}