use rbx_dom_weak::types::Ref; #[derive(Debug)] pub enum Error{ Runner(mlua::Error), NoScript, NoSource, } impl Error{ pub fn print(self){ match self{ Self::Runner(mlua::Error::RuntimeError(s))=>{ println!("lua error: {s:?}"); }, other=>println!("{:?}",other), } } } pub struct Script{ script:Ref, } impl Script{ pub const fn new(script:Ref)->Self{ Self{script} } pub fn run(&self,context:&mut crate::context::Context)->Result<(),Error>{ // grab source let source={ let instance=context.dom.get_by_ref(self.script).ok_or(Error::NoScript)?; match instance.properties.get("Source").ok_or(Error::NoSource)?{ rbx_dom_weak::types::Variant::String(s)=>s.clone(), _=>Err(Error::NoSource)?, } }; // run it lole let runner=crate::runner::Runner::new().map_err(Error::Runner)?; runner.set_script(self.script).map_err(Error::Runner)?; runner.run(source,context).map_err(Error::Runner) } }