pub unsafe trait Toml: Serialize + DeserializeOwned {
const OS_DIRECTORY: Dir;
const PROJECT_DIRECTORY: &'static str;
const SUB_DIRECTORIES: &'static str;
const FILE: &'static str;
const FILE_EXT: &'static str;
const FILE_NAME: &'static str;
const FILE_NAME_GZIP: &'static str;
const FILE_NAME_TMP: &'static str;
const FILE_NAME_GZIP_TMP: &'static str;
Show 34 methods
// Provided methods
fn mkdir() -> Result<(), Error> { ... }
fn rm_rf() -> Result<(), Error> { ... }
fn rm() -> Result<(), Error> { ... }
fn exists() -> Result<bool, Error> { ... }
fn project_dir() -> &'static str { ... }
fn sub_dirs() -> &'static str { ... }
fn file_name() -> &'static str { ... }
fn file_ext() -> &'static str { ... }
fn file() -> &'static str { ... }
fn file_gzip() -> &'static str { ... }
fn file_tmp() -> &'static str { ... }
fn file_gzip_tmp() -> &'static str { ... }
fn base_path() -> Result<PathBuf, Error> { ... }
fn absolute_path() -> Result<PathBuf, Error> { ... }
fn read_to_bytes() -> Result<Vec<u8>, Error> { ... }
fn read_to_bytes_gzip() -> Result<Vec<u8>, Error> { ... }
fn exists_gzip() -> Result<bool, Error> { ... }
fn from_file() -> Result<Self, Error> { ... }
fn from_file_gzip() -> Result<Self, Error> { ... }
fn save(&self) -> Result<(), Error> { ... }
fn save_gzip(&self) -> Result<(), Error> { ... }
fn save_atomic(&self) -> Result<(), Error> { ... }
fn save_atomic_gzip(&self) -> Result<(), Error> { ... }
fn rm_atomic(&self) -> Result<(), Error> { ... }
fn rm_atomic_gzip(&self) -> Result<(), Error> { ... }
fn rm_tmp() -> Result<(), Error> { ... }
fn absolute_path_gzip() -> Result<PathBuf, Error> { ... }
fn into_writable_fmt(&self) -> Result<String, Error> { ... }
fn read_to_string() -> Result<String, Error> { ... }
fn info_dash(string: &str) { ... }
fn to_bytes(&self) -> Result<Vec<u8>, Error> { ... }
fn from_bytes(bytes: &[u8]) -> Result<Self, Error> { ... }
fn to_string(&self) -> Result<String, Error> { ... }
fn from_string(string: &str) -> Result<Self, Error> { ... }
}Expand description
Required Associated Constants§
sourceconst OS_DIRECTORY: Dir
const OS_DIRECTORY: Dir
Which OS directory it will be saved in.
sourceconst PROJECT_DIRECTORY: &'static str
const PROJECT_DIRECTORY: &'static str
What the main project directory will be.
sourceconst SUB_DIRECTORIES: &'static str
const SUB_DIRECTORIES: &'static str
Optional sub directories in between the project directory and file.
sourceconst FILE_NAME_GZIP: &'static str
const FILE_NAME_GZIP: &'static str
What the gzip variant of the filename will be.
sourceconst FILE_NAME_TMP: &'static str
const FILE_NAME_TMP: &'static str
What the tmp variant of the filename will be.
sourceconst FILE_NAME_GZIP_TMP: &'static str
const FILE_NAME_GZIP_TMP: &'static str
What the gzip + tmp variant of the filename will be.
Provided Methods§
sourcefn mkdir() -> Result<(), Error>
fn mkdir() -> Result<(), Error>
Create the directories leading up-to the file.
This is not necessary when using any variant of
Self::save() as the directories are created implicitly.
sourcefn rm_rf() -> Result<(), Error>
fn rm_rf() -> Result<(), Error>
Recursively remove this file’s project directory.
This deletes all directories starting from Self::PROJECT_DIRECTORY.
For example:
disk::toml!(State, disk::Dir::Data, "MyProject", "sub_dir", "state");This project’s file would be located at ~/.local/share/myproject.
This is the PATH that gets removed recursively.
This is akin to running:
rm -rf ~/.local/share/myprojectThe input to all disk macros are sanity checked.
The worst you can do with this function is delete your project’s directory.
This function calls std::fs::remove_dir_all, which does not follow symlinks.
sourcefn rm() -> Result<(), Error>
fn rm() -> Result<(), Error>
Try deleting the file.
This will return success if the file doesn’t exist or if deleted.
It will return failure if the file existed but could not be deleted or if any other error occurs.
sourcefn exists() -> Result<bool, Error>
fn exists() -> Result<bool, Error>
Check if the file exists.
true== The file exists.false== The file does not exist.anyhow::Error== There was an error, existance is unknown.
sourcefn project_dir() -> &'static str
fn project_dir() -> &'static str
The main project directory.
You can also access this directly on your type:
disk::toml!(Data, disk::Dir::Cache, "MyProject", "", "data");
#[derive(Serialize, Deserialize)]
struct Data(u64);
assert!(Data::project_dir() == Data::PROJECT_DIRECTORY);sourcefn sub_dirs() -> &'static str
fn sub_dirs() -> &'static str
The directories after the main project directory, before the file. (the first directory specified in the SUB_DIRECTORIES constant).
You can also access this directly on your type:
disk::toml!(Data, disk::Dir::Cache, "MyProject", "sub_directory", "data");
#[derive(Serialize, Deserialize)]
struct Data(u64);
assert!(Data::sub_dirs() == Data::SUB_DIRECTORIES);sourcefn file_name() -> &'static str
fn file_name() -> &'static str
The filename + extension associated with this struct.
You can also access this directly on your type:
disk::toml!(Data, disk::Dir::Cache, "MyProject", "", "data");
#[derive(Serialize, Deserialize)]
struct Data(u64);
assert!(Data::file_name() == Data::FILE_NAME);sourcefn file_ext() -> &'static str
fn file_ext() -> &'static str
The extension associated with this struct.
You can also access this directly on your type:
disk::toml!(Data, disk::Dir::Cache, "MyProject", "", "data");
#[derive(Serialize, Deserialize)]
struct Data(u64);
assert!(Data::file_ext() == Data::FILE_EXT);sourcefn file() -> &'static str
fn file() -> &'static str
The file associated with this struct WITHOUT the extension.
You can also access this directly on your type:
disk::toml!(Data, disk::Dir::Cache, "MyProject", "", "data");
#[derive(Serialize, Deserialize)]
struct Data(u64);
assert!(Data::file() == Data::FILE);sourcefn file_gzip() -> &'static str
fn file_gzip() -> &'static str
The gzip variant of the filename + extension associated with this struct.
You can also access this directly on your type:
disk::toml!(Data, disk::Dir::Cache, "MyProject", "", "data");
#[derive(Serialize, Deserialize)]
struct Data(u64);
assert!(Data::file_gzip() == Data::FILE_NAME_GZIP);sourcefn file_tmp() -> &'static str
fn file_tmp() -> &'static str
The tmp variant of the filename + extension associated with this struct.
You can also access this directly on your type:
disk::toml!(Data, disk::Dir::Cache, "MyProject", "", "data");
#[derive(Serialize, Deserialize)]
struct Data(u64);
assert!(Data::file_tmp() == Data::FILE_NAME_TMP);sourcefn file_gzip_tmp() -> &'static str
fn file_gzip_tmp() -> &'static str
The gzip + tmp variant of the filename + extension associated with this struct.
You can also access this directly on your type:
disk::toml!(Data, disk::Dir::Cache, "MyProject", "", "data");
#[derive(Serialize, Deserialize)]
struct Data(u64);
assert!(Data::file_gzip_tmp() == Data::FILE_NAME_GZIP_TMP);sourcefn base_path() -> Result<PathBuf, Error>
fn base_path() -> Result<PathBuf, Error>
The base path associated with this struct (PATH leading up to the file).
sourcefn absolute_path() -> Result<PathBuf, Error>
fn absolute_path() -> Result<PathBuf, Error>
The absolute PATH of the file associated with this struct.
sourcefn read_to_bytes_gzip() -> Result<Vec<u8>, Error>
fn read_to_bytes_gzip() -> Result<Vec<u8>, Error>
Read the file directly as bytes, and attempt gzip decompression.
This assumes the file is suffixed with .gz, for example:
config.json // What `.read_to_bytes()` will look for
config.json.gz // What `.read_to_bytes_gzip()` will look for
sourcefn exists_gzip() -> Result<bool, Error>
fn exists_gzip() -> Result<bool, Error>
Same as Self::exists() but checks if the gzip file exists.
Self::exists()checks forfile.toml.Self::exists_gzip()checks forfile.toml.gz.
sourcefn from_file() -> Result<Self, Error>
fn from_file() -> Result<Self, Error>
Read the file directly as bytes and turn into a Rust structure.
sourcefn from_file_gzip() -> Result<Self, Error>
fn from_file_gzip() -> Result<Self, Error>
Read the file directly as bytes, decompress with gzip and turn into a Rust structure.
sourcefn save(&self) -> Result<(), Error>
fn save(&self) -> Result<(), Error>
Try saving as a file.
Calling this will automatically create the directories leading up to the file.
sourcefn save_gzip(&self) -> Result<(), Error>
fn save_gzip(&self) -> Result<(), Error>
Try saving as a compressed file using gzip.
This will suffix the file with .gz, for example:
config.json // Normal file name with `.save()`
config.json.gz // File name when using `.save_gzip()`
Calling this will automatically create the directories leading up to the file.
sourcefn save_atomic(&self) -> Result<(), Error>
fn save_atomic(&self) -> Result<(), Error>
Note: This may not truely be atomic on Windows.
Try saving to a TEMPORARY file first, then renaming it to the associated file.
This lowers the chance for data corruption on interrupt.
The temporary file is removed if the rename fails.
The temporary file name is: file_name + extension + .tmp, for example:
config.toml // <- Real file
config.toml.tmp // <- Temporary version
Already existing .tmp files will be overwritten.
Calling this will automatically create the directories leading up to the file.
sourcefn save_atomic_gzip(&self) -> Result<(), Error>
fn save_atomic_gzip(&self) -> Result<(), Error>
Combines Self::save_gzip() and Self::save_atomic().
sourcefn rm_atomic(&self) -> Result<(), Error>
fn rm_atomic(&self) -> Result<(), Error>
Note: This may not truely be atomic on Windows.
Rename the associated file before attempting to delete it.
This lowers the chance for data corruption on interrupt.
The temporary file name is: file_name + extension + .tmp, for example:
config.toml // <- Real file
config.toml.tmp // <- Temporary version
Already existing .tmp files will be overwritten.
sourcefn rm_atomic_gzip(&self) -> Result<(), Error>
fn rm_atomic_gzip(&self) -> Result<(), Error>
Same as Self::rm_atomic() but looks for the .gz extension.
sourcefn rm_tmp() -> Result<(), Error>
fn rm_tmp() -> Result<(), Error>
Try deleting any leftover .tmp files from Self::save_atomic() or Self::save_atomic_gzip()
This will return success if the files don’t exist or if deleted.
It will return failure if files existed but could not be deleted or if any other error occurs.
sourcefn absolute_path_gzip() -> Result<PathBuf, Error>
fn absolute_path_gzip() -> Result<PathBuf, Error>
The absolute PATH of the file associated with this struct WITH the .gz extension.
sourcefn into_writable_fmt(&self) -> Result<String, Error>
fn into_writable_fmt(&self) -> Result<String, Error>
sourcefn info_dash(string: &str)
fn info_dash(string: &str)
Print the file’s contents to console surrounded by dashes with the log crate.