Struct config_file_handler::FileHandler [] [src]

pub struct FileHandler<T> {
    // some fields omitted
}

Struct for reading and writing config files.

Thread- and Process-Safety

Since all instances of FileHandler initialised with the same value for name within a single process will likely refer to the same file on disk, it is not safe to access any such instance concurrently with that same or any other such instance (with the exception of the path() function which is the only non-mutating member function).

For instances initialised with different values for name, it is safe to access separate instances concurrently.

It is possibly unsafe to call write_file() concurrently with a different process calling read_file() or write_file() where both processes have the same name and their instances of FileHandler are using the same name, since these may be accessing the same file on disk. However, it is safe to call read_file() concurrently across multiple such processes, since this function doesn't modify the file.

Perhaps the easiest way to make multi-process access safe is to ensure each process is a single execution of a binary, and that each binary is located in a directory which is mutually-exclusive to all other such binaries, and that each config file to be managed by FileHandler is placed in each binary's current_bin_dir(). In this way, each process should be the only one accessing that file.

Methods

impl<T> FileHandler<T>
[src]

fn open<S: AsRef<OsStr> + ?Sized>(name: &S) -> Result<FileHandler<T>, Error>

Constructor taking the required file name (not the full path) This function will return an error if the file does not exist.

This function tests whether it has write access to the file in the following locations in this order (see also an example config file flowchart):

  1. current_bin_dir()
  2. user_app_dir()
  3. system_cache_dir()

See Thread- and Process-Safety for notes on thread- and process-safety.

fn path(&self) -> &Path

Get the full path to the file.

impl<T> FileHandler<T> where T: Default + Encodable
[src]

fn new<S: AsRef<OsStr> + ?Sized>(name: &S) -> Result<FileHandler<T>, Error>

Constructor taking the required file name (not the full path) The config file will be initialised to a default if it does not exist.

This function tests whether it has write access to the file in the following locations in this order (see also an example config file flowchart):

  1. current_bin_dir()
  2. user_app_dir()
  3. system_cache_dir()

See Thread- and Process-Safety for notes on thread- and process-safety.

impl<T> FileHandler<T> where T: Decodable
[src]

fn read_file(&self) -> Result<T, Error>

Read the contents of the file and decode it as JSON.

impl<T> FileHandler<T> where T: Encodable
[src]

fn write_file(&self, contents: &T) -> Result<()Error>

Write contents to the file as JSON.