diff --git a/src/lib.rs b/src/lib.rs index 5eeb130..f683f49 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,18 +1,30 @@ mod bsp; -pub fn read<R:std::io::Read>(mut input:R)->vbsp::BspResult<vbsp::Bsp>{ +pub struct Bsp(vbsp::Bsp); + +#[derive(Debug)] +pub enum ReadError{ + Bsp(vbsp::BspError), + Io(std::io::Error), +} +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:std::io::Read>(mut input:R)->Result<Bsp,ReadError>{ let mut s=Vec::new(); - match input.read_to_end(&mut s){ - Ok(_)=>(), - Err(e)=>println!("load_bsp::convert read_to_end failed: {:?}",e), - } + //TODO: mmap + input.read_to_end(&mut s).map_err(ReadError::Io)?; - vbsp::Bsp::read(s.as_slice()) + vbsp::Bsp::read(s.as_slice()).map(Bsp).map_err(ReadError::Bsp) } pub fn convert<AcquireTextureId,AcquireMeshId>( - bsp:&vbsp::Bsp, + bsp:&Bsp, acquire_texture_id:AcquireTextureId, acquire_mesh_id:AcquireMeshId )->strafesnet_common::map::CompleteMap @@ -20,5 +32,5 @@ where AcquireTextureId:FnMut(&str)->strafesnet_common::model::TextureId, AcquireMeshId:FnMut(&str)->strafesnet_common::model::MeshId, { - bsp::convert(bsp,acquire_texture_id,acquire_mesh_id) + bsp::convert(&bsp.0,acquire_texture_id,acquire_mesh_id) } \ No newline at end of file