Skip to main content

RegexCount

Enum RegexCount 

Source
pub enum RegexCount {
    Default,
    Bytes(NonZeroU32),
    Lines(Option<NonZeroU32>),
}
Expand description

Scan window specifier for a TypeKind::Regex rule.

Encodes the three mutually-exclusive scan modes in a single enum so that the “byte count” and “line count” cases cannot be confused. The regex/l shorthand (line mode with no explicit count) is represented explicitly as RegexCount::Lines(None), which is behaviorally equivalent to RegexCount::Default – both walk the full 8192-byte capped window – but preserves the magic-file surface syntax of the original rule. The 8192-byte hard cap (matching GNU file’s FILE_REGEX_MAX) is applied by the evaluator on every variant.

§Examples

use libmagic_rs::parser::ast::RegexCount;
use std::num::NonZeroU32;

// Plain `regex` (no suffix): default 8192-byte window.
assert_eq!(RegexCount::default(), RegexCount::Default);

// `regex/100`: scan at most 100 bytes.
let hundred_bytes = RegexCount::Bytes(NonZeroU32::new(100).unwrap());

// `regex/1l`: scan the first line.
let one_line = RegexCount::Lines(NonZeroU32::new(1));

// `regex/l`: line-mode with no explicit count (walks terminators
// to the end of the 8192-byte capped window).
let unbounded_lines = RegexCount::Lines(None);

Variants§

§

Default

No scan bound (plain regex with no suffix). Scans the default 8192-byte window from the rule’s offset.

§

Bytes(NonZeroU32)

Byte-bounded scan (regex/N with no /l flag). The window is min(n, 8192, remaining_buffer) bytes long. NonZeroU32 makes a zero-byte scan unrepresentable.

§

Lines(Option<NonZeroU32>)

Line-bounded scan (regex/Nl or regex/l). The window walks LF / CRLF / bare CR line terminators from the offset. With Some(n), the walk stops after the Nth terminator (inclusive). With None (the regex/l shorthand), the walk continues to the end of the 8192-byte capped window. Either way the effective byte window is capped at 8192.

Trait Implementations§

Source§

impl Clone for RegexCount

Source§

fn clone(&self) -> RegexCount

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RegexCount

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for RegexCount

Source§

fn default() -> RegexCount

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for RegexCount

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for RegexCount

Source§

fn eq(&self, other: &RegexCount) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for RegexCount

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Copy for RegexCount

Source§

impl Eq for RegexCount

Source§

impl StructuralPartialEq for RegexCount

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,