Mercurial > touhou
changeset 701:b6c351ca0a35
anm0: return the nom IResult and the list of Anm0s.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Fri, 23 Aug 2019 15:34:03 +0200 |
parents | ccb739c5b66c |
children | 718348c7608e |
files | examples/anmrenderer.rs examples/eclrenderer.rs examples/stdrenderer.rs src/th06/anm0.rs src/th06/anm0_vm.rs src/th06/ecl_vm.rs src/th06/enemy.rs |
diffstat | 7 files changed, 17 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/examples/anmrenderer.rs +++ b/examples/anmrenderer.rs @@ -108,7 +108,8 @@ fn main() { // Open the ANM file. let buf = load_file_into_vec(anm_filename); - let anm0 = Anm0::from_slice(&buf).unwrap(); + let (_, mut anms) = Anm0::from_slice(&buf).unwrap(); + let anm0 = anms.pop().unwrap(); if !anm0.scripts.contains_key(&script) { eprintln!("This anm0 doesn’t contain a script named {}.", script);
--- a/examples/eclrenderer.rs +++ b/examples/eclrenderer.rs @@ -115,7 +115,8 @@ fn main() { // Open the ANM file. let buf = load_file_into_vec(anm_filename); - let anm0 = Anm0::from_slice(&buf).unwrap(); + let (_, mut anms) = Anm0::from_slice(&buf).unwrap(); + let anm0 = anms.pop().unwrap(); let anm0 = Rc::new(RefCell::new(anm0)); if ecl.subs.len() < sub as usize {
--- a/examples/stdrenderer.rs +++ b/examples/stdrenderer.rs @@ -132,7 +132,8 @@ fn main() { // Open the ANM file. let buf = load_file_into_vec(anm_filename); - let anm0 = Anm0::from_slice(&buf).unwrap(); + let (_, mut anms) = Anm0::from_slice(&buf).unwrap(); + let anm0 = anms.pop().unwrap(); // TODO: seed this PRNG with a valid seed. let prng = Rc::new(RefCell::new(Prng::new(0)));
--- a/src/th06/anm0.rs +++ b/src/th06/anm0.rs @@ -70,11 +70,8 @@ pub struct Anm0 { impl Anm0 { /// Parse a slice of bytes into an `Anm0` struct. - pub fn from_slice(data: &[u8]) -> Result<Anm0, ()> { - // XXX: report the exact nom error instead! - let (_, anm0) = parse_anm0(data).or_else(|_| Err(()))?; - assert_eq!(anm0.len(), 1); - Ok(anm0[0].clone()) + pub fn from_slice(data: &[u8]) -> IResult<&[u8], Vec<Anm0>> { + parse_anm0(data) } /// TODO @@ -318,7 +315,9 @@ mod tests { let mut file = io::BufReader::new(file); let mut buf = vec![]; file.read_to_end(&mut buf).unwrap(); - let anm0 = Anm0::from_slice(&buf).unwrap(); + let (_, mut anms) = Anm0::from_slice(&buf).unwrap(); + assert_eq!(anms.len(), 1); + let anm0 = anms.pop().unwrap(); assert_eq!(anm0.size, (256, 256)); assert_eq!(anm0.format, 5); }
--- a/src/th06/anm0_vm.rs +++ b/src/th06/anm0_vm.rs @@ -444,7 +444,8 @@ mod tests { let mut file = io::BufReader::new(file); let mut buf = vec![]; file.read_to_end(&mut buf).unwrap(); - let anm0 = Anm0::from_slice(&buf).unwrap(); + let (_, mut anms) = Anm0::from_slice(&buf).unwrap(); + let anm0 = anms.pop().unwrap(); assert_eq!(anm0.size, (256, 256)); assert_eq!(anm0.format, 5); let sprite = Rc::new(RefCell::new(Sprite::new()));
--- a/src/th06/ecl_vm.rs +++ b/src/th06/ecl_vm.rs @@ -977,7 +977,8 @@ mod tests { let mut file = io::BufReader::new(file); let mut buf = vec![]; file.read_to_end(&mut buf).unwrap(); - let anm0 = Anm0::from_slice(&buf).unwrap(); + let (_, mut anms) = Anm0::from_slice(&buf).unwrap(); + let anm0 = anms.pop().unwrap(); let anm0 = Rc::new(RefCell::new(anm0)); let prng = Rc::new(RefCell::new(Prng::new(0))); let game = Game::new(prng, Rank::Easy);
--- a/src/th06/enemy.rs +++ b/src/th06/enemy.rs @@ -501,7 +501,8 @@ mod tests { let mut file = io::BufReader::new(file); let mut buf = vec![]; file.read_to_end(&mut buf).unwrap(); - let anm0 = Anm0::from_slice(&buf).unwrap(); + let (_, mut anms) = Anm0::from_slice(&buf).unwrap(); + let anm0 = anms.pop().unwrap(); let anm0 = Rc::new(RefCell::new(anm0)); let prng = Rc::new(RefCell::new(Prng::new(0))); let game = Game::new(prng, Rank::Easy);