Skip to main content

CrushHeader

Struct CrushHeader 

Source
#[repr(C)]
pub struct CrushHeader { pub magic: [u8; 4], pub original_size: u64, pub flags: u8, pub reserved: [u8; 3], }
Expand description

Crush compressed file header (16 bytes, little-endian)

Format:

Offset | Size | Field
-------|------|-------
0      | 4    | magic_number ([u8; 4])
4      | 8    | original_size (u64, little-endian)
12     | 1    | flags (u8)
13     | 3    | reserved (padding to 16 bytes)

Flags byte (bit fields):

  • Bit 0: Has CRC32 (if set, CRC32 follows header)
  • Bit 1: Has metadata (if set, variable-length metadata follows header)
  • Bits 2-7: Reserved for future use

Fields§

§magic: [u8; 4]

Magic number identifying the compression plugin

§original_size: u64

Original uncompressed size in bytes

§flags: u8

Feature flags (see struct documentation)

§reserved: [u8; 3]

Reserved bytes for future extensions (must be zero)

Implementations§

Source§

impl CrushHeader

Source

pub const SIZE: usize = 16

Size of the header in bytes (fixed at 16 bytes)

Source

pub const MAGIC_PREFIX: [u8; 2]

Crush file format identifier prefix (“CR” = 0x43 0x52)

Source

pub const VERSION: u8 = 0x01

Crush format version (V1 = 0x01)

Source

pub fn new(magic: [u8; 4], original_size: u64) -> Self

Create a new header with the given plugin magic number and original size

Source

pub fn with_crc32(self) -> Self

Create a header with CRC32 flag set

Source

pub fn with_metadata(self) -> Self

Create a header with metadata flag set

Source

pub fn has_valid_prefix(&self) -> bool

Check if this header has a valid Crush magic number prefix

Source

pub fn has_valid_version(&self) -> bool

Check if this header has a valid Crush format version

Source

pub fn plugin_id(&self) -> u8

Get the plugin ID from the magic number (4th byte)

Source

pub fn has_crc32(&self) -> bool

Check if CRC32 flag is set

Source

pub fn has_metadata(&self) -> bool

Check if metadata flag is set

Source

pub fn to_bytes(&self) -> [u8; 16]

Serialize header to bytes (little-endian)

Source

pub fn from_bytes(bytes: &[u8; 16]) -> Result<Self>

Deserialize header from bytes

§Errors

Returns an error if:

  • The magic number prefix is not valid (not “CR”)
  • The version byte is unsupported
Source

pub fn write_to<W: Write>(&self, writer: &mut W) -> Result<()>

Write header to a writer

§Errors

Returns an error if the write operation fails

Source

pub fn read_from<R: Read>(reader: &mut R) -> Result<Self>

Read header from a reader

§Errors

Returns an error if:

  • The read operation fails
  • The header validation fails (invalid magic or version)

Trait Implementations§

Source§

impl Clone for CrushHeader

Source§

fn clone(&self) -> CrushHeader

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 CrushHeader

Source§

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

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

impl PartialEq for CrushHeader

Source§

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

Source§

impl Eq for CrushHeader

Source§

impl StructuralPartialEq for CrushHeader

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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.