Struct Dir
pub struct Dir { /* private fields */ }Expand description
A directory tree an app may use, and nothing outside it.
Cloning is cheap and the clone names the same tree.
Implementations§
§impl Dir
impl Dir
pub fn open(location: Location) -> Result<Dir, FsError>
pub fn open(location: Location) -> Result<Dir, FsError>
The tree at location. Nothing is created until something is
written.
§Errors
FsError::Unsupported for a location this target has no backend
for, and FsError::InvalidPath for an OPFS profile that is not one
path component.
pub async fn write_atomic(
&self,
path: &VPath,
bytes: &[u8],
) -> Result<(), FsError>
pub async fn write_atomic( &self, path: &VPath, bytes: &[u8], ) -> Result<(), FsError>
Replaces the file’s contents with bytes so that a crash leaves
either the old contents or the new ones, creating missing parents.
§Errors
FsError::IsADirectory, FsError::NotADirectory for a file in
the way of a parent, FsError::InvalidPath for the root, or the
backend’s failure. Natively a failure of the final directory fsync
happens after the new contents are visible.
pub async fn save_document(
&self,
path: &VPath,
bytes: &[u8],
) -> Result<(), FsError>
pub async fn save_document( &self, path: &VPath, bytes: &[u8], ) -> Result<(), FsError>
Saves a user’s document as write_atomic does,
but natively through an existing symbolic link and keeping the
file’s permission bits, so saving an edited file changes only its
contents. Dangling links and files with several names are refused
rather than detached. Natively the folder must exist: a chosen folder
that has gone (an unmounted drive) is an error, never recreated.
§Errors
As write_atomic; natively FsError::NotFound
for a missing folder and an unwritable or unsupported existing target.
pub async fn write_private(
&self,
path: &VPath,
bytes: &[u8],
) -> Result<(), FsError>
pub async fn write_private( &self, path: &VPath, bytes: &[u8], ) -> Result<(), FsError>
write_atomic, readable only by this user:
natively the file is 0600 and its parent directory 0700. Browser
and memory storage are private to the page or process already.
§Errors
As write_atomic.
pub async fn create_new(
&self,
path: &VPath,
bytes: &[u8],
) -> Result<bool, FsError>
pub async fn create_new( &self, path: &VPath, bytes: &[u8], ) -> Result<bool, FsError>
Publishes bytes at path only while nothing is there, creating
missing parents. Returns false, and changes nothing, when the name
is taken.
§Errors
FsError::InvalidPath for the root, or the backend’s failure.
pub async fn rename_noreplace(
&self,
from: &VPath,
to: &VPath,
) -> Result<(), FsError>
pub async fn rename_noreplace( &self, from: &VPath, to: &VPath, ) -> Result<(), FsError>
Moves the file or directory at from to to, failing rather than
replacing anything at to. Missing parents of to are created.
§Errors
FsError::NotFound for from, FsError::AlreadyExists for to,
FsError::InvalidPath for the root or a move into itself, and
FsError::Unsupported where a backend cannot move this kind of
entry (directories in browsers without FileSystemHandle.move, and
natively on file systems without no-replace renames).
pub async fn remove(&self, path: &VPath) -> Result<(), FsError>
pub async fn remove(&self, path: &VPath) -> Result<(), FsError>
Removes a file or an empty directory.
§Errors
FsError::NotFound, FsError::DirectoryNotEmpty,
FsError::InvalidPath for the root, or the backend’s failure.
pub async fn create_dir_all(&self, path: &VPath) -> Result<(), FsError>
pub async fn create_dir_all(&self, path: &VPath) -> Result<(), FsError>
Creates the directory and any missing parents; an existing directory is success.
§Errors
A file in the way, or the backend’s failure.
pub async fn list(&self, path: &VPath) -> Result<Vec<Entry>, FsError>
pub async fn list(&self, path: &VPath) -> Result<Vec<Entry>, FsError>
The directory’s entries, sorted by name. Natively, names that are not
UTF-8 cannot be [VPath] components and are left out.
§Errors
FsError::NotFound (including a root nothing was written to yet),
FsError::NotADirectory, or the backend’s failure.
pub async fn lock(&self, path: &VPath, mode: LockMode) -> Result<Lock, FsError>
pub async fn lock(&self, path: &VPath, mode: LockMode) -> Result<Lock, FsError>
Waits for a lock on the lock file at path, created empty (with its
parents) when missing. Other processes, and on the web other tabs of
the origin, that lock the same path through tilo-files exclude one
another as mode says.
Lock a dedicated file, not one you replace with
write_atomic: natively a replacement is a new
file, and the lock stays on the old one.
Natively the wait blocks the polling thread until tilo_rt::io
carries file work; use [blocking::try_lock] to avoid waiting.
§Errors
FsError::InvalidPath for the root, FsError::Unsupported in a
browser without Web Locks, or the backend’s failure.
pub fn watch(&self, path: &VPath) -> Result<Watch, FsError>
pub fn watch(&self, path: &VPath) -> Result<Watch, FsError>
Watches path (a file, or a directory and everything below it) for
changes. The watch reports paths relative to this Dir.
§Errors
FsError::Unsupported with [Feature::Watch] for native
directories in a build without the watch feature; natively,
FsError::NotFound when path does not exist yet.
pub async fn trash(&self, path: &VPath) -> Result<(), FsError>
pub async fn trash(&self, path: &VPath) -> Result<(), FsError>
Moves the entry to the user’s trash. Not in this version.
§Errors
FsError::Unsupported with [Feature::Trash] on every target.
pub fn native_path(&self, path: &VPath) -> Result<PathBuf, Unsupported<Feature>>
pub fn native_path(&self, path: &VPath) -> Result<PathBuf, Unsupported<Feature>>
The operating-system path of path, for code that must hand one to a
native API. Portable code uses the operations above.
§Errors
[Unsupported] for browser and in-memory storage.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Dir
impl RefUnwindSafe for Dir
impl Send for Dir
impl Sync for Dir
impl Unpin for Dir
impl UnsafeUnpin for Dir
impl UnwindSafe for Dir
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more