use rbx_dom_weak::types::Ref; use crate::context::Context; #[derive(Debug)] pub enum Error{ NoScript, NoSource, } fn get_full_name(dom:&rbx_dom_weak::WeakDom,instance:&rbx_dom_weak::Instance)->String{ let mut full_name=instance.name.clone(); let mut pref=instance.parent(); while let Some(parent)=dom.get_by_ref(pref){ full_name.insert(0,'.'); full_name.insert_str(0,parent.name.as_str()); pref=parent.parent(); } full_name } pub struct Script{ pub(crate)script:Ref, } impl Script{ pub const fn new(script:Ref)->Self{ Self{script} } pub fn name_source(&self,context:&Context)->Result<(String,String),Error>{ let instance=context.dom.get_by_ref(self.script).ok_or(Error::NoScript)?; let source=match instance.properties.get("Source").ok_or(Error::NoSource)?{ rbx_dom_weak::types::Variant::String(s)=>s.clone(), _=>Err(Error::NoSource)?, }; Ok((get_full_name(&context.dom,instance),source)) } }