fn class_is_a(class: &str, superclass: &str) -> bool { if class==superclass { return true } let class_descriptor=rbx_reflection_database::get().classes.get(class); if let Some(descriptor) = &class_descriptor { if let Some(class_super) = &descriptor.superclass { return class_is_a(&class_super, superclass) } } return false } pub fn get_objects(buf_thing: R, superclass: &str) -> Result, Box> { // Using buffered I/O is recommended with rbx_binary let dom = rbx_binary::from_reader(buf_thing)?; let mut objects = std::vec::Vec::::new(); //move matching instances into objects let (_,mut instances) = dom.into_raw(); for (_,instance) in instances.drain() { if class_is_a(instance.class.as_str(), superclass) { objects.push(instance); } } return Ok(objects) }