strafe-client/src/script.rs

38 lines
931 B
Rust

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))
}
}