Module regex_automata::util::wire

source ·
Expand description

Types and routines that support the wire format of finite automata.

Currently, this module just exports a few error types and some small helpers for deserializing dense DFAs using correct alignment.

Structs

  • A hack to align a smaller type B with a bigger type T.
  • An error that occurs when deserializing an object defined in this crate.
  • An error that occurs when serializing an object from this crate.

Enums

Traits

  • Endian 🔒
    A simple trait for writing code generic over endianness.

Functions

  • add 🔒
    Add the given numbers, and on overflow, return an error that includes ‘what’ in the error message.
  • Allocate a byte buffer of the given size, along with some initial padding such that buf[padding..] has the same alignment as T, where the alignment of T must be at most 8. In particular, callers should treat the first N bytes (second return value) as padding bytes that must not be overwritten. In all cases, the following identity holds:
  • Checks that the given slice has an alignment that matches T.
  • Checks that the given slice has some minimal length. If it’s smaller than the bound given, then a “buffer too small” error is returned with what describing what the buffer represents.
  • mul 🔒
    Multiply the given numbers, and on overflow, return an error that includes ‘what’ in the error message.
  • Returns the number of additional bytes required to add to the given length in order to make the total length a multiple of 4. The return value is always less than 4.
  • Reads the endianness check from the beginning of the given slice and confirms that the endianness of the serialized object matches the expected endianness. If the slice is too small or if the endianness check fails, this returns an error.
  • read_label 🔒
    Reads a NUL terminated label starting at the beginning of the given slice.
  • Reads a pattern ID from the given slice. If the slice has insufficient length, then this panics. If the deserialized integer exceeds the pattern ID limit for the current target, then this returns an error.
  • Reads a pattern ID from the given slice. If the slice has insufficient length, then this panics. Otherwise, the deserialized integer is assumed to be a valid pattern ID.
  • Reads a state ID from the given slice. If the slice has insufficient length, then this panics. If the deserialized integer exceeds the state ID limit for the current target, then this returns an error.
  • Reads a state ID from the given slice. If the slice has insufficient length, then this panics. Otherwise, the deserialized integer is assumed to be a valid state ID.
  • read_u16 🔒
    Read a u16 from the beginning of the given slice in native endian format. If the slice has fewer than 2 bytes, then this panics.
  • read_u32 🔒
    Read a u32 from the beginning of the given slice in native endian format. If the slice has fewer than 4 bytes, then this panics.
  • read_u128 🔒
    Read a u128 from the beginning of the given slice in native endian format. If the slice has fewer than 16 bytes, then this panics.
  • Reads a version number from the beginning of the given slice and confirms that is matches the expected version number given. If the slice is too small or if the version numbers aren’t equivalent, this returns an error.
  • shl 🔒
    Shift a left by b, and on overflow, return an error that includes ‘what’ in the error message.
  • Reads a possibly empty amount of padding, up to 7 bytes, from the beginning of the given slice. All padding bytes must be NUL bytes.
  • Attempts to read a state ID from the given slice. If the slice has an insufficient number of bytes or if the state ID exceeds the limit for the current target, then this returns an error.
  • Try to read a u16 from the beginning of the given slice in native endian format. If the slice has fewer than 2 bytes, then this returns an error. The error message will include the what description of what is being deserialized, for better error messages. what should be a noun in singular form.
  • Try to read a u16 as a usize from the beginning of the given slice in native endian format. If the slice has fewer than 2 bytes or if the deserialized number cannot be represented by usize, then this returns an error. The error message will include the what description of what is being deserialized, for better error messages. what should be a noun in singular form.
  • Try to read a u32 from the beginning of the given slice in native endian format. If the slice has fewer than 4 bytes, then this returns an error. The error message will include the what description of what is being deserialized, for better error messages. what should be a noun in singular form.
  • Try to read a u32 as a usize from the beginning of the given slice in native endian format. If the slice has fewer than 4 bytes or if the deserialized number cannot be represented by usize, then this returns an error. The error message will include the what description of what is being deserialized, for better error messages. what should be a noun in singular form.
  • Try to read a u128 from the beginning of the given slice in native endian format. If the slice has fewer than 16 bytes, then this returns an error. The error message will include the what description of what is being deserialized, for better error messages. what should be a noun in singular form.
  • Safely converts a &[u32] to &[PatternID] with zero cost.
  • Safely converts a &[u32] to &[StateID] with zero cost.
  • Safely converts a &mut [u32] to &mut [StateID] with zero cost.
  • Writes 0xFEFF as an integer using the given endianness.
  • Returns the number of bytes written by the endianness check.
  • Writes the given label to the buffer as a NUL terminated string. The label given must not contain NUL, otherwise this will panic. Similarly, the label must not be longer than 255 bytes, otherwise this will panic.
  • Returns the total number of bytes (including padding) that would be written for the given label. This panics if the given label contains a NUL byte or is longer than 255 bytes. (The size restriction exists so that searching for a label during deserialization can be done in small bounded space.)
  • Write the given pattern ID to the beginning of the given slice of bytes using the specified endianness. The given slice must have length at least PatternID::SIZE, or else this panics. Upon success, the total number of bytes written is returned.
  • Write the given state ID to the beginning of the given slice of bytes using the specified endianness. The given slice must have length at least StateID::SIZE, or else this panics. Upon success, the total number of bytes written is returned.
  • Writes the given version number to the beginning of the given slice.
  • Returns the number of bytes written by writing the version number.

Type Aliases