Skip to main content

OffsetSpec

Enum OffsetSpec 

Source
pub enum OffsetSpec {
    Absolute(i64),
    Indirect {
        base_offset: i64,
        pointer_type: TypeKind,
        adjustment: i64,
        endian: Endianness,
    },
    Relative(i64),
    FromEnd(i64),
}
Expand description

Offset specification for locating data in files

Variants§

§

Absolute(i64)

Absolute offset from file start (or from file end if negative)

Positive values are offsets from the start of the file. Negative values are offsets from the end of the file (same as FromEnd).

§Examples

use libmagic_rs::parser::ast::OffsetSpec;

let offset = OffsetSpec::Absolute(0x10); // Read at byte 16 from start
let from_end = OffsetSpec::Absolute(-4); // 4 bytes before end of file
§

Indirect

Indirect offset through pointer dereferencing

Reads a pointer value at base_offset, interprets it according to pointer_type and endian, then adds adjustment to get the final offset.

§Examples

use libmagic_rs::parser::ast::{OffsetSpec, TypeKind, Endianness};

let indirect = OffsetSpec::Indirect {
    base_offset: 0x20,
    pointer_type: TypeKind::Long { endian: Endianness::Little, signed: false },
    adjustment: 4,
    endian: Endianness::Little,
};

Fields

§base_offset: i64

Base offset to read pointer from

§pointer_type: TypeKind

Type of pointer value

§adjustment: i64

Adjustment to add to pointer value

§endian: Endianness

Endianness for pointer reading

§

Relative(i64)

Relative offset from previous match position

§Examples

use libmagic_rs::parser::ast::OffsetSpec;

let relative = OffsetSpec::Relative(8); // 8 bytes after previous match
§

FromEnd(i64)

Offset from end of file (negative values move towards start)

§Examples

use libmagic_rs::parser::ast::OffsetSpec;

let from_end = OffsetSpec::FromEnd(-16); // 16 bytes before end of file

Trait Implementations§

Source§

impl Clone for OffsetSpec

Source§

fn clone(&self) -> OffsetSpec

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 OffsetSpec

Source§

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

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

impl<'de> Deserialize<'de> for OffsetSpec

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 OffsetSpec

Source§

fn eq(&self, other: &OffsetSpec) -> 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 OffsetSpec

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 Eq for OffsetSpec

Source§

impl StructuralPartialEq for OffsetSpec

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>,