Skip to main content

parse_type

Function parse_type 

Source
pub fn parse_type(input: &str) -> IResult<&str, TypeKind>
Expand description

Parse a type specification (byte, short, long, quad, string, etc.)

Supports various type formats found in magic files:

  • byte / ubyte - single byte (signed / unsigned)
  • short / ushort - 16-bit integer (native endian, signed / unsigned)
  • leshort / uleshort - 16-bit little-endian integer
  • beshort / ubeshort - 16-bit big-endian integer
  • long / ulong - 32-bit integer (native endian, signed / unsigned)
  • lelong / ulelong - 32-bit little-endian integer
  • belong / ubelong - 32-bit big-endian integer
  • quad / uquad - 64-bit integer (native endian, signed / unsigned)
  • lequad / ulequad - 64-bit little-endian integer
  • bequad / ubequad - 64-bit big-endian integer
  • string - null-terminated string

§Examples

use libmagic_rs::parser::grammar::parse_type;
use libmagic_rs::parser::ast::{TypeKind, Endianness};

assert_eq!(parse_type("byte"), Ok(("", TypeKind::Byte { signed: true })));
assert_eq!(parse_type("leshort"), Ok(("", TypeKind::Short { endian: Endianness::Little, signed: true })));
assert_eq!(parse_type("bequad"), Ok(("", TypeKind::Quad { endian: Endianness::Big, signed: true })));
assert_eq!(parse_type("string"), Ok(("", TypeKind::String { max_length: None })));

§Errors

Returns a nom parsing error if the input doesn’t match any known type