#[non_exhaustive]pub enum MetaType {
Default,
Clear,
Name(String),
Use(String),
Indirect,
Offset,
}Expand description
Control-flow directive carried by TypeKind::Meta.
These are not value-reading types – they correspond to magic(5)
control-flow keywords (default, clear, name, use, indirect,
offset) that modify how a rule set is traversed rather than reading
bytes from the buffer. All six variants are fully evaluated by the
engine: default/clear manage per-level sibling-matched state;
name/use implement subroutine dispatch; indirect re-applies the
root rule database at a resolved offset; and offset emits the
current file position as Value::Uint for printf-style formatting.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Default
default directive: fires when no sibling at the same indentation
level has matched at the current offset. See magic(5) for the
“default” type semantics.
§Examples
use libmagic_rs::parser::ast::MetaType;
let meta = MetaType::Default;
assert_eq!(meta, MetaType::Default);Clear
clear directive: resets the sibling-matched flag so a later
default sibling can fire even if an earlier sibling matched.
See magic(5) for the “clear” type semantics.
§Examples
use libmagic_rs::parser::ast::MetaType;
let meta = MetaType::Clear;
assert_eq!(meta, MetaType::Clear);Name(String)
name <identifier> directive: declares a named subroutine that
can be invoked later via MetaType::Use. See magic(5) for the
“name” type semantics.
§Examples
use libmagic_rs::parser::ast::MetaType;
let meta = MetaType::Name("part2".to_string());
assert_eq!(meta, MetaType::Name("part2".to_string()));Use(String)
use <identifier> directive: invokes a named subroutine
previously declared via MetaType::Name. See magic(5) for the
“use” type semantics.
§Examples
use libmagic_rs::parser::ast::MetaType;
let meta = MetaType::Use("part2".to_string());
assert_eq!(meta, MetaType::Use("part2".to_string()));Indirect
indirect directive: re-applies the entire magic database at the
resolved offset. See magic(5) for the “indirect” type semantics.
§Examples
use libmagic_rs::parser::ast::MetaType;
let meta = MetaType::Indirect;
assert_eq!(meta, MetaType::Indirect);Offset
offset type keyword: reports the current file offset rather than
reading a typed value from the buffer. See magic(5) for the
“offset” type semantics.
Evaluation: the engine resolves the rule’s offset specification
to an absolute position and emits a RuleMatch whose value is
Value::Uint(position). Message templates can reference that
value through printf-style format specifiers (e.g. %lld),
which are substituted by
crate::output::format::format_magic_message at description-
assembly time. The only supported operator is x (AnyValue);
any other operator is debug!-logged and skipped.
§Examples
use libmagic_rs::parser::ast::MetaType;
let meta = MetaType::Offset;
assert_eq!(meta, MetaType::Offset);