Struct testdir::NumberedDir
source · pub struct NumberedDir { /* private fields */ }
Expand description
A sequentially numbered directory.
This struct represents a directory is a sequentially numbered list of directories. It allows creating the next sequential directory safely across processes or threads without any coordination as well as cleanup of older directories.
The directory has a parent directory in which the numbered directory is created, as well as a base which is used as the directory name to which to affix the number.
Implementations§
source§impl NumberedDir
impl NumberedDir
sourcepub fn create(
parent: impl AsRef<Path>,
base: &str,
count: NonZeroU8
) -> Result<Self>
pub fn create( parent: impl AsRef<Path>, base: &str, count: NonZeroU8 ) -> Result<Self>
Creates the next sequential numbered directory.
The directory will be created inside parent
and will start with the name given in
base
to which the next available number is suffixed.
If there are concurrent directories being created this will retry incrementing the number up to 16 times before giving up.
The count
specifies the total number of directories to leave in place, including
the newly created directory. Other previous directories with all their files and
subdirectories are recursively removed. Care is taken to avoid removing new
directories concurrently created by parallel invocations in other threads or
processes..
sourcepub fn iterate(parent: impl AsRef<Path>, base: &str) -> Result<NumberedDirIter>
pub fn iterate(parent: impl AsRef<Path>, base: &str) -> Result<NumberedDirIter>
Returns an iterator over all NumberedDir
entries in a parent directory.
This iterator can be used to get access to existing NumberedDir
directories
without creating a new one.
sourcepub fn base(&self) -> &str
pub fn base(&self) -> &str
Returns the base of this NumberedDir
instance.
The base is the name of the final NumberedDir::path
component without the
numbered suffix.
sourcepub fn number(&self) -> u16
pub fn number(&self) -> u16
Returns the number suffix of this NumberedDir
instance.
The number is the suffix of the final component of NumberedDir::path
.
sourcepub fn create_subdir(&self, rel_path: impl AsRef<Path>) -> Result<PathBuf>
pub fn create_subdir(&self, rel_path: impl AsRef<Path>) -> Result<PathBuf>
Creates a subdirecotry within this numbered directory.
If the subdirectory already exists nothing is done.
There is no particular safety from malicious input, the numbered directory can be
trivially escaped using the parent directory location: ../somewhere/else
.
Trait Implementations§
source§impl Clone for NumberedDir
impl Clone for NumberedDir
source§fn clone(&self) -> NumberedDir
fn clone(&self) -> NumberedDir
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for NumberedDir
impl Debug for NumberedDir
source§impl PartialEq for NumberedDir
impl PartialEq for NumberedDir
source§fn eq(&self, other: &NumberedDir) -> bool
fn eq(&self, other: &NumberedDir) -> bool
self
and other
values to be equal, and is used
by ==
.