Struct zbox::Repo[][src]

pub struct Repo { /* fields omitted */ }
Expand description

An encrypted repository contains the whole file system.

A Repo represents a secure collection which consists of files, directories and their associated data. Similar to std::fs, Repo provides methods to manipulate the enclosed file system.

Storages

ZboxFS supports a variety of underlying storages, which are listed below.

StorageURI identifierCargo Feature
Memory“mem://”N/A
OS file system“file://”storage-file
SQLite“sqlite://”storage-sqlite
Redis“redis://”storage-redis
Zbox Cloud Storage“zbox://”storage-zbox-native

* Visit zbox.io to learn more about Zbox Cloud Storage.

By default, only memory storage is enabled. To use other storages, you need to specify it as dependency features in your Cargo.toml.

For example, to use OS file as underlying storage, specify its feature in your project’s Cargo.toml file.

[dependencies]
zbox = { version = "0.9.2", features = ["storage-file"] }

Create and open Repo

Repo can be created on different underlying storages using RepoOpener. It uses an URI-like string to specify its storage type and location. The URI string starts with an identifier which specifies the storage type, as shown in above table. You can check more location URI details at: RepoOpener.

Repo can only be opened once at a time. After opened, it keeps locked from other open attempts until it goes out of scope. Once Repo is dropped, any opened files or version readers won’t be accessible.

Optionally, Repo can be opened in read-only mode if you only need read access.

Examples

Create an OS file system based repository.

use zbox::{init_env, RepoOpener};

init_env();
let mut repo = RepoOpener::new()
    .create(true)
    .open("file:///path/to/repo", "pwd")?;

Create a memory based repository.

let mut repo = RepoOpener::new().create(true).open("mem://foo", "pwd")?;

Open a repository in read-only mode.

let mut repo = RepoOpener::new()
    .read_only(true)
    .open("file:///path/to/repo", "pwd")?;

Implementations

Returns whether the URI points at an existing repository.

Get repository metadata information.

Reset password for the repository.

Note: if this method failed due to IO error, super block might be damaged. If it is the case, use repair_super_block to restore super block before re-opening the repo.

Repair possibly damaged super block.

This method will try to repair super block using backup. One scenario is when reset_password failed due to IO error, super block might be damaged. Using this method can restore the damaged super block from backup. If super block is all good, this method is no-op.

This method is not useful for memory-based storage and must be called when repo is closed.

Returns whether the path points at an existing entity in repository.

path must be an absolute path.

Returns whether the path exists in repository and is pointing at a regular file.

path must be an absolute path.

Returns whether the path exists in repository and is pointing at a directory.

path must be an absolute path.

Create a file in read-write mode.

This method will create a file if it does not exist, and will truncate it if it does. See the OpenOptions::open method for more details.

path must be an absolute path.

This method is not atomic.

Attempts to open a file in read-only mode.

path must be an absolute path.

See the OpenOptions::open method for more details.

Errors

This method will return an error if path does not already exist. Other errors may also be returned according to OpenOptions::open.

Examples

let mut f = repo.open_file("foo.txt")?;

Creates a new, empty directory at the specified path.

path must be an absolute path.

This method is atomic.

Recursively create a directory and all of its parent components if they are missing.

path must be an absolute path.

This method is not atomic in whole, but creating each entry is atomic.

Returns a vector of all the entries within a directory.

path must be an absolute path.

Get the metadata about a file or directory at specified path.

path must be an absolute path.

Return a vector of history versions of a regular file at specified path.

path must be an absolute path to a regular file.

Copies the content of one file to another.

This method will overwrite the content of to.

from and to must be absolute paths to regular files.

If from and to both point to the same file, this method is no-op.

This method is not atomic.

Copies a directory to another recursively.

This method will overwrite the content of files in to with the files in from which have same relative location.

from and to must be absolute paths to directories.

If to is not empty, the entire directory tree of from will be merged to to.

This method will stop if any errors happened.

If from and to both point to the same directory, this method is no-op.

This method is not atomic.

Removes a regular file from the repository.

path must be an absolute path.

This method is atomic.

Remove an existing empty directory.

path must be an absolute path.

This method is atomic.

Removes a directory at this path, after removing all its children. Use carefully!

path must be an absolute path.

This method is not atomic in whole, but removing each entry is atomic.

Rename a file or directory to a new name, replacing the original file if to already exists.

from and to must be absolute paths.

This method is atomic.

Permanently destroy a repository specified by uri.

This will permanently delete all files and directories in a repository regardless it is opened or not. Use it with caution.

Trait Implementations

Formats the value using the given formatter. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.