forked from StrafesNET/strafe-project
36 lines
1011 B
Rust
36 lines
1011 B
Rust
use std::io::Read;
|
|
|
|
mod rbx;
|
|
mod primitives;
|
|
|
|
pub struct Dom(rbx_dom_weak::WeakDom);
|
|
|
|
#[derive(Debug)]
|
|
pub enum ReadError{
|
|
RbxBinary(rbx_binary::DecodeError),
|
|
RbxXml(rbx_xml::DecodeError),
|
|
Io(std::io::Error),
|
|
UnknownFileFormat,
|
|
}
|
|
impl std::fmt::Display for ReadError{
|
|
fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
|
|
write!(f,"{self:?}")
|
|
}
|
|
}
|
|
impl std::error::Error for ReadError{}
|
|
|
|
pub fn read<R:Read>(input:R)->Result<Dom,ReadError>{
|
|
let mut buf=std::io::BufReader::new(input);
|
|
let peek=std::io::BufRead::fill_buf(&mut buf).map_err(ReadError::Io)?;
|
|
match &peek[0..8]{
|
|
b"<roblox!"=>rbx_binary::from_reader(buf).map(Dom).map_err(ReadError::RbxBinary),
|
|
b"<roblox "=>rbx_xml::from_reader_default(buf).map(Dom).map_err(ReadError::RbxXml),
|
|
_=>Err(ReadError::UnknownFileFormat),
|
|
}
|
|
}
|
|
|
|
//ConvertError
|
|
|
|
pub fn convert<F:FnMut(Option<&str>)->strafesnet_common::model::RenderConfigId>(dom:&Dom,acquire_render_config_id:F)->rbx::PartialMap1{
|
|
rbx::convert(&dom.0,acquire_render_config_id)
|
|
} |