Skip to main content

Dir

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

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 fn memory() -> Dir

An empty tree in memory that only this Dir and its clones see.

pub async fn read(&self, path: &VPath) -> Result<Vec<u8>, FsError>

The whole file.

§Errors

FsError::NotFound, FsError::IsADirectory, or the backend’s failure.

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>

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>

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>

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>

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>

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>

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>

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 metadata(&self, path: &VPath) -> Result<Meta, FsError>

Size, modification time and kind of the entry.

§Errors

FsError::NotFound, or the backend’s failure.

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>

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>

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>>

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§

§

impl Clone for Dir

§

fn clone(&self) -> Dir

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
§

impl Debug for Dir

§

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

Formats the value using the given formatter. Read more

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> 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
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

§

fn simd_from(_simd: S, value: T) -> T

§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

§

fn simd_into(self, simd: S) -> T

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 = 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.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> Fruit for T
where T: Send + Downcast,

§

impl<T> MaybeSendSync for T
where T: Send + Sync + ?Sized,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T

§

impl<T> WasmNotSync for T
where T: Sync,