Skip to main content

SourceFingerprint

Struct SourceFingerprint 

Source
pub struct SourceFingerprint {
    pub mtime_ns: u64,
    pub ctime_ns: u64,
    pub file_size: u64,
}
Expand description

File metadata used to decide whether a source-derived cache entry is fresh.

This is intentionally metadata-only. Callers that need content validation can combine it with their existing content hash, while cheap caches can use the same freshness shape without inventing their own (mtime, size) tuple.

Fields§

§mtime_ns: u64

Source file modification time as nanoseconds since the Unix epoch.

A value of 0 means the timestamp could not be read. Fast metadata-only cache hits should treat that as unknown and miss conservatively.

§ctime_ns: u64

Source file inode change time (ctime) as nanoseconds since the Unix epoch, or 0 when the platform does not expose it.

mtime alone is writer-controlled: an editor, a git checkout, a codemod, or touch -r can restore it byte-for-byte after rewriting a file. When the replacement happens to keep the same length the (mtime, size) pair is unchanged and a metadata-only cache hit serves stale analysis for genuinely different content. ctime moves on every inode write and cannot be restored through the normal filesystem API, so pairing it with mtime makes the metadata-only fast path trustworthy.

Only Unix reports it (stat.st_ctime). Windows keeps 0, which costs the metadata-only fast path (the caller falls through to the read plus content-hash comparison and still hits) until someone wires up FILE_BASIC_INFO.ChangeTime.

§file_size: u64

Source file size in bytes.

Implementations§

Source§

impl SourceFingerprint

Source

pub const fn new(mtime_ns: u64, file_size: u64) -> Self

Build a fingerprint from explicit metadata parts, with no known ctime.

A fingerprint built this way is never trustworthy without content.

Source

pub const fn with_ctime(mtime_ns: u64, ctime_ns: u64, file_size: u64) -> Self

Build a fingerprint from explicit metadata parts, including ctime.

Source

pub fn from_metadata(metadata: &Metadata) -> Self

Build a fingerprint from filesystem metadata.

Source

pub const fn has_known_mtime(self) -> bool

Returns true when the modification time is known.

Source

pub const fn is_trustworthy_without_content(self) -> bool

Returns true when this fingerprint may stand in for the file’s content.

Requires both timestamps: mtime detects the ordinary edit, ctime detects the same-size edit whose mtime was restored. A caller that gets false must fall through to reading the file and comparing content hashes.

Trait Implementations§

Source§

impl Clone for SourceFingerprint

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for SourceFingerprint

Source§

impl Debug for SourceFingerprint

Source§

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

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

impl<'de> Deserialize<'de> for SourceFingerprint

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

Source§

impl Hash for SourceFingerprint

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for SourceFingerprint

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for SourceFingerprint

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 StructuralPartialEq for SourceFingerprint

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<'a, T> FromIn<'a, T> for T

Source§

fn from_in(t: T, _: &'a Allocator) -> T

Converts to this type from the input type within the given allocator.
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<'a, T, U> IntoIn<'a, U> for T
where U: FromIn<'a, T>,

Source§

fn into_in(self, allocator: &'a Allocator) -> U

Converts this type into the (usually inferred) input type within the given allocator.
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 = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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.