Chksum

Struct Chksum 

Source
pub struct Chksum(/* private fields */);
Expand description

A 31-bit checksum with validity marker

The checksum is computed using the DJB2 hash algorithm and masked to 31 bits. The most significant bit (bit 31) must be zero for a valid checksum, allowing quick detection of erased/uninitialized flash memory (which reads as 0xFF).

Implementations§

Source§

impl Chksum

Source

pub const SIZE: usize = 4usize

Size of the checksum in bytes (4 bytes for u32)

Source

pub const fn zero() -> Self

Create a zero checksum

This is used as the initial previous checksum for the first savegame.

Source

pub const fn hash(prev: Chksum, data: &[u8]) -> Self

Compute a checksum for the given data, chained with a previous checksum

Uses DJB2 hash algorithm. The previous checksum is included in the hash to create a chain of checksums linking savegames together.

§Arguments
  • prev - The checksum of the previous savegame
  • data - The data to hash
Source

pub const fn is_valid(&self) -> bool

Check if this checksum has a valid format

A valid checksum has its most significant bit set to zero. This allows quick detection of uninitialized flash (0xFF) or corrupted data.

Source

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

Convert the checksum to big-endian bytes

Source

pub const fn from_bytes(bytes: [u8; 4]) -> Self

Parse a checksum from big-endian bytes

Trait Implementations§

Source§

impl Clone for Chksum

Source§

fn clone(&self) -> Chksum

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 Chksum

Source§

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

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

impl PartialEq for Chksum

Source§

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

Source§

impl Eq for Chksum

Source§

impl StructuralPartialEq for Chksum

Auto Trait Implementations§

§

impl Freeze for Chksum

§

impl RefUnwindSafe for Chksum

§

impl Send for Chksum

§

impl Sync for Chksum

§

impl Unpin for Chksum

§

impl UnwindSafe for Chksum

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