Skip to main content

FileSeq

Struct FileSeq 

Source
pub struct FileSeq { /* private fields */ }
Expand description

File-backed sequence counter that survives restarts, including power loss.

Each write goes to a sibling temp file that is fsync’d, atomically renamed over the target, and (on Unix) followed by an fsync of the parent directory so the rename itself is durable. This matters because the counter is a fiscal anti-replay guard — a value that silently reverted after a crash would re-issue a sequence number the device already saw (rejected as BadSequenceNumber).

The file’s content is a single decimal integer (UTF-8, optionally followed by whitespace). On open, missing files initialise to 0; corrupted contents are surfaced as io::ErrorKind::InvalidData rather than silently reset.

This is not safe to share between processes. The crate does not take an OS-level file lock. Consumers running multiple processes against the same counter file must coordinate externally.

Implementations§

Source§

impl FileSeq

Source

pub fn open_or_create(path: impl AsRef<Path>) -> Result<Self>

Open or create a counter file. If the file exists, its contents are parsed as the last- returned value; otherwise the counter starts at zero.

§Errors

Surfaces filesystem failures and parsing failures (corrupted file contents).

Source

pub const fn current(&self) -> i64

Most-recently-issued value (without advancing the counter).

Trait Implementations§

Source§

impl Debug for FileSeq

Source§

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

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

impl SequenceProvider for FileSeq

Source§

fn next(&mut self) -> Result<i64>

Advance and return the next sequence number. Read more

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

Source§

type Output = T

Should always be Self
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.