validator: prepare for checks
This commit is contained in:
parent
7334e88b55
commit
e2c72c90c7
validation/src
@ -1,4 +1,4 @@
|
|||||||
use crate::rbx_util::{get_mapinfo,read_dom,MapInfo,ReadDomError,GetMapInfoError,ParseGameIDError};
|
use crate::rbx_util::{get_root_instance,get_mapinfo,read_dom,MapInfo,ReadDomError,GetRootInstanceError,ParseGameIDError};
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -11,7 +11,7 @@ pub enum Error{
|
|||||||
ParseUserID(core::num::ParseIntError),
|
ParseUserID(core::num::ParseIntError),
|
||||||
ParseModelVersion(core::num::ParseIntError),
|
ParseModelVersion(core::num::ParseIntError),
|
||||||
ModelFileDecode(ReadDomError),
|
ModelFileDecode(ReadDomError),
|
||||||
GetMapInfo(GetMapInfoError),
|
GetRootInstance(GetRootInstanceError),
|
||||||
ParseGameID(ParseGameIDError),
|
ParseGameID(ParseGameIDError),
|
||||||
}
|
}
|
||||||
impl std::fmt::Display for Error{
|
impl std::fmt::Display for Error{
|
||||||
@ -66,12 +66,15 @@ impl crate::message_handler::MessageHandler{
|
|||||||
// decode dom (slow!)
|
// decode dom (slow!)
|
||||||
let dom=read_dom(std::io::Cursor::new(model_data)).map_err(Error::ModelFileDecode)?;
|
let dom=read_dom(std::io::Cursor::new(model_data)).map_err(Error::ModelFileDecode)?;
|
||||||
|
|
||||||
|
// extract the root instance
|
||||||
|
let model_instance=get_root_instance(&dom).map_err(Error::GetRootInstance)?;
|
||||||
|
|
||||||
// parse create fields out of asset
|
// parse create fields out of asset
|
||||||
let MapInfo{
|
let MapInfo{
|
||||||
display_name,
|
display_name,
|
||||||
creator,
|
creator,
|
||||||
game_id,
|
game_id,
|
||||||
}=get_mapinfo(&dom).map_err(Error::GetMapInfo)?;
|
}=get_mapinfo(&dom,model_instance);
|
||||||
|
|
||||||
let game_id=game_id.map_err(Error::ParseGameID)?;
|
let game_id=game_id.map_err(Error::ParseGameID)?;
|
||||||
|
|
||||||
|
@ -100,20 +100,24 @@ fn string_value(instance:Option<&rbx_dom_weak::Instance>)->Result<&str,StringVal
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum GetMapInfoError{
|
pub enum GetRootInstanceError{
|
||||||
ModelFileRootMustHaveOneChild,
|
ModelFileRootMustHaveOneChild,
|
||||||
ModelFileChildRefIsNil,
|
ModelFileChildRefIsNil,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_mapinfo(dom:&rbx_dom_weak::WeakDom)->Result<MapInfo,GetMapInfoError>{
|
pub fn get_root_instance(dom:&rbx_dom_weak::WeakDom)->Result<&rbx_dom_weak::Instance,GetRootInstanceError>{
|
||||||
let &[map_ref]=dom.root().children()else{
|
let &[map_ref]=dom.root().children()else{
|
||||||
return Err(GetMapInfoError::ModelFileRootMustHaveOneChild);
|
return Err(GetRootInstanceError::ModelFileRootMustHaveOneChild);
|
||||||
};
|
};
|
||||||
let model_instance=dom.get_by_ref(map_ref).ok_or(GetMapInfoError::ModelFileChildRefIsNil)?;
|
let model_instance=dom.get_by_ref(map_ref).ok_or(GetRootInstanceError::ModelFileChildRefIsNil)?;
|
||||||
|
|
||||||
Ok(MapInfo{
|
Ok(model_instance)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_mapinfo<'a>(dom:&'a rbx_dom_weak::WeakDom,model_instance:&rbx_dom_weak::Instance)->MapInfo<'a>{
|
||||||
|
MapInfo{
|
||||||
display_name:string_value(find_first_child_class(dom,model_instance,"DisplayName","StringValue")),
|
display_name:string_value(find_first_child_class(dom,model_instance,"DisplayName","StringValue")),
|
||||||
creator:string_value(find_first_child_class(dom,model_instance,"Creator","StringValue")),
|
creator:string_value(find_first_child_class(dom,model_instance,"Creator","StringValue")),
|
||||||
game_id:model_instance.name.parse(),
|
game_id:model_instance.name.parse(),
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user