diff formats/src/th06/std.rs @ 774:d08eb4c9fce3

formats: Upgrade nom to version 8
author Link Mauve <linkmauve@linkmauve.fr>
date Mon, 29 Sep 2025 11:10:15 +0000
parents 21b186be2590
children 94033091458b
line wrap: on
line diff
--- a/formats/src/th06/std.rs
+++ b/formats/src/th06/std.rs
@@ -2,9 +2,9 @@
 
 use nom::{
     IResult,
+    Parser,
     bytes::complete::tag,
     number::complete::{le_u8, le_u16, le_u32, le_i32, le_f32},
-    sequence::tuple,
     combinator::map,
     multi::{many0, count},
     error::ErrorKind,
@@ -164,13 +164,13 @@
 }
 
 fn parse_quad(i: &[u8]) -> IResult<&[u8], Quad> {
-    let (i, (unk1, size)) = tuple((le_u16, le_u16))(i)?;
+    let (i, (unk1, size)) = (le_u16, le_u16).parse(i)?;
     if unk1 == 0xffff {
         return Err(Err::Error(nom::error::Error::new(i, ErrorKind::Eof)));
     }
     // TODO: replace this assert with a custom error.
     assert_eq!(size, 0x1c);
-    let (i, (anm_script, _, x, y, z, width, height)) = tuple((le_u16, tag(b"\0\0"), le_f32, le_f32, le_f32, le_f32, le_f32))(i)?;
+    let (i, (anm_script, _, x, y, z, width, height)) = (le_u16, tag(&b"\0\0"[..]), le_f32, le_f32, le_f32, le_f32, le_f32).parse(i)?;
     let quad = Quad {
         anm_script,
         pos: Position { x, y, z },
@@ -180,7 +180,7 @@
 }
 
 fn parse_model(i: &[u8]) -> IResult<&[u8], Model> {
-    let (i, (_id, unknown, x, y, z, width, height, depth, quads)) = tuple((le_u16, le_u16, le_f32, le_f32, le_f32, le_f32, le_f32, le_f32, many0(parse_quad)))(i)?;
+    let (i, (_id, unknown, x, y, z, width, height, depth, quads)) = (le_u16, le_u16, le_f32, le_f32, le_f32, le_f32, le_f32, le_f32, many0(parse_quad)).parse(i)?;
     let bounding_box = [x, y, z, width, height, depth];
     let model = Model {
         unknown,
@@ -191,7 +191,7 @@
 }
 
 fn parse_instance(i: &[u8]) -> IResult<&[u8], Instance> {
-    let (i, (id, unknown, x, y, z)) = tuple((le_u16, le_u16, le_f32, le_f32, le_f32))(i)?;
+    let (i, (id, unknown, x, y, z)) = (le_u16, le_u16, le_f32, le_f32, le_f32).parse(i)?;
     if id == 0xffff && unknown == 0xffff {
         return Err(Err::Error(nom::error::Error::new(i, ErrorKind::Eof)));
     }
@@ -205,7 +205,7 @@
 }
 
 fn parse_instruction(i: &[u8]) -> IResult<&[u8], Call> {
-    let (i, (time, opcode, size)) = tuple((le_u32, le_u16, le_u16))(i)?;
+    let (i, (time, opcode, size)) = (le_u32, le_u16, le_u16).parse(i)?;
     if time == 0xffffffff && opcode == 0xffff && size == 0xffff {
         return Err(Err::Error(nom::error::Error::new(i, ErrorKind::Eof)));
     }
@@ -220,15 +220,15 @@
 fn parse_stage(input: &[u8]) -> IResult<&[u8], Stage> {
     let i = &input[..];
 
-    let (i, (num_models, _num_faces, object_instances_offset, script_offset, _, name, music_names, music_paths)) = tuple((
-        le_u16, le_u16, le_u32, le_u32, tag(b"\0\0\0\0"),
+    let (i, (num_models, _num_faces, object_instances_offset, script_offset, _, name, music_names, music_paths)) = (
+        le_u16, le_u16, le_u32, le_u32, tag(&b"\0\0\0\0"[..]),
         le_String,
-        map(tuple((le_String, le_String, le_String, le_String)), |(a, b, c, d)| [a, b, c, d]),
-        map(tuple((le_String, le_String, le_String, le_String)), |(a, b, c, d)| [a, b, c, d])
-    ))(i)?;
+        map((le_String, le_String, le_String, le_String), |(a, b, c, d)| [a, b, c, d]),
+        map((le_String, le_String, le_String, le_String), |(a, b, c, d)| [a, b, c, d])
+    ).parse(i)?;
     let musics = music_names.iter().zip(&music_paths).map(|(name, path)| if name == " " { None } else { Some((name.clone(), path.clone())) }).collect();
 
-    let (_, offsets) = count(le_u32, num_models as usize)(i)?;
+    let (_, offsets) = count(le_u32, num_models as usize).parse(i)?;
 
     let mut models = vec![];
     for offset in offsets {
@@ -236,8 +236,8 @@
         models.push(model);
     }
 
-    let (_, instances) = many0(parse_instance)(&input[object_instances_offset as usize..])?;
-    let (_, script) = many0(parse_instruction)(&input[script_offset as usize..])?;
+    let (_, instances) = many0(parse_instance).parse(&input[object_instances_offset as usize..])?;
+    let (_, script) = many0(parse_instruction).parse(&input[script_offset as usize..])?;
 
     let stage = Stage {
         name,