Skip to main content

EntryCount

Struct EntryCount 

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

Proof that one entry was counted against max_file_count while its bytes are not yet charged.

A hardlink’s size is only known in the second extraction pass, but the number of entries must be bounded in the first, before anything is buffered or copied. The first pass takes an EntryCount; the second spends it in QuotaTracker::charge, which adds the bytes without counting the entry again. Holding one therefore makes counting an entry twice, or never, unrepresentable.

Deliberately not Clone/Copy/Default, and only producible by QuotaTracker::reserve_count. Zero-sized.

§Examples

A validated hardlink carries its EntryCount:

use exarch_core::SecurityConfig;
use exarch_core::security::EntryValidator;
use exarch_core::security::ValidatedEntryType;
use exarch_core::types::DestDir;
use exarch_core::types::EntryType;
use std::path::Path;
use std::path::PathBuf;

let dest = DestDir::new(PathBuf::from("/tmp"))?;
let config = SecurityConfig::default()
    .with_allow_hardlinks(true)
    .validate()?;
let mut validator = EntryValidator::new(&config, &dest);

let entry = validator.validate_entry(
    Path::new("link"),
    &EntryType::Hardlink {
        target: PathBuf::from("target.txt"),
    },
    0,
    None,
    None,
    None,
)?;

if let ValidatedEntryType::Hardlink { counted, .. } = entry.entry_type() {
    println!("{counted:?}");
}

Trait Implementations§

Source§

impl Debug for EntryCount

Source§

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

Formats the value using the given formatter. 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 = !

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.