use binrw::BinReaderExt; mod newtypes; pub mod file; pub mod map; pub mod bot; pub mod demo; pub enum Error{ UnexpectedFourCC, Header(file::Error), Map(map::Error), Bot(bot::Error), Demo(demo::Error), } pub enum SNF{ Map(map::StreamableMap), Bot(bot::StreamableBot), Demo(demo::StreamableDemo), } pub fn read_snf(input:R)->Result,Error>{ let file=file::File::new(input).map_err(Error::Header)?; Ok(match file.fourcc(){ file::FourCC::Map=>SNF::Map(map::StreamableMap::new(file).map_err(Error::Map)?), file::FourCC::Bot=>SNF::Bot(bot::StreamableBot::new(file).map_err(Error::Bot)?), file::FourCC::Demo=>SNF::Demo(demo::StreamableDemo::new(file).map_err(Error::Demo)?), }) } pub fn read_map(input:R)->Result,Error>{ let file=file::File::new(input).map_err(Error::Header)?; match file.fourcc(){ file::FourCC::Map=>Ok(map::StreamableMap::new(file).map_err(Error::Map)?), _=>Err(Error::UnexpectedFourCC) } } pub fn read_bot(input:R)->Result,Error>{ let file=file::File::new(input).map_err(Error::Header)?; match file.fourcc(){ file::FourCC::Bot=>Ok(bot::StreamableBot::new(file).map_err(Error::Bot)?), _=>Err(Error::UnexpectedFourCC) } } pub fn read_demo(input:R)->Result,Error>{ let file=file::File::new(input).map_err(Error::Header)?; match file.fourcc(){ file::FourCC::Demo=>Ok(demo::StreamableDemo::new(file).map_err(Error::Demo)?), _=>Err(Error::UnexpectedFourCC) } } #[cfg(test)] mod tests { //use super::*; #[test] fn test() { } }