# HG changeset patch # User Emmanuel Gil Peyrot # Date 1566567243 -7200 # Node ID b6c351ca0a353bbf6bdaeee3e133bc53e78e1f81 # Parent ccb739c5b66c90d46c8d408e12ac3d32a1c28697 anm0: return the nom IResult and the list of Anm0s. diff --git a/examples/anmrenderer.rs b/examples/anmrenderer.rs --- 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); diff --git a/examples/eclrenderer.rs b/examples/eclrenderer.rs --- 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 { diff --git a/examples/stdrenderer.rs b/examples/stdrenderer.rs --- 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))); diff --git a/src/th06/anm0.rs b/src/th06/anm0.rs --- 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 { - // 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> { + 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); } diff --git a/src/th06/anm0_vm.rs b/src/th06/anm0_vm.rs --- 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())); diff --git a/src/th06/ecl_vm.rs b/src/th06/ecl_vm.rs --- 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); diff --git a/src/th06/enemy.rs b/src/th06/enemy.rs --- 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);