summaryrefslogtreecommitdiff
path: root/src/script.rs
blob: 0de2b54708ed5c803efef6e8563ad44e74597b34 (plain)
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)
	}
}