#configuration #storage #settings #store #local

nonvolatile

一个提供存储配置数据的包,可以将其放置在不显眼的位置

13 个版本 (7 个破坏性更新)

0.8.3 2021 年 8 月 24 日
0.7.1 2021 年 2 月 26 日
0.7.0 2020 年 1 月 22 日
0.6.1 2019 年 10 月 3 日

#418配置

每月下载量 24

MIT 许可证

30KB
460

非易失性 ─ 最新版本

非易失性是一个用于存储持久设置和配置数据的库。

非易失性状态是通过使用名称(通常为创建它的程序的名称)实例化一个 State 实例来创建的。任何设置的值都将写入到平台依赖的一些常见目录中。值将一直持续到它们被覆盖,并且可以通过加载该名称状态的任何程序访问。 State 实例是专有的(即,两个程序或同一程序的两个实例不能同时打开相同的 State)。

大多数内置类型以及任何实现了 serde::Serialize/Deserialize 的类型都可以传递到 State::setState::get 中进行读取。

有关更详细的信息,请查看此处文档

示例

use nonvolatile::State;
use generic_error::*;

fn main() -> Result<()> {
	
	//create a new state instance with the name "foo"
	let mut state = State::load_else_create("foo")?;
	//set some variables in foo
	state.set("var", "some value")?;
	state.set("user_wants_pie", true)?;
	
	//destroy the state variable
	drop(state);
	
	//create a new state instance
	let state = State::load_else_create("foo")?;
	//retrieve the previously set variable.
	assert_eq!(state.get::<bool>("user_wants_pie"), Some(true));
	assert_eq!(state.get::<String>("var").unwrap(), "some value");
	Ok(())
}

注释

默认情况下,给定名称的状态将存储在 Linux 和 MacOS 系统的 $HOME/.local/rust_nonvolatile/<name>,Windows 系统的 %appdata%\rust_nonvolatile\<name>。如果程序环境中未定义 $HOME 或 %appdata%,则非易失性将回退到 Linux/MacOS 的 /etc 和 Windows 的 C:\ProgramData

如果您的环境不可靠,或者您有希望保留设置和配置的位置,可以使用 *_from 函数来覆盖默认存储位置(使用 new_from 代替 new,使用 load_from 代替 load,使用 load_else_create_from 代替 load_else_create)。

请注意保持存储位置的一致性!如果您在一个程序实例中使用了来自一个位置的状态,然后在下一个实例中使用了来自不同位置的状态,您将会在不同的地方留下两个名称相同但内容不匹配的状态。

可用状态函数

 pub fn set<T>               (&mut self, var: &str, value: T) -> Result<()>
 pub fn get<'de, T>          (&self, var: &str)               -> Option<T>
 pub fn has                  (&self, item: &str)              -> bool
 pub fn delete               (&mut self, name: &str)          -> Result<()>

 pub fn load_else_create     (name: &str)                     -> Result<State>
 pub fn load_else_create_from(name: &str, storage_path: &str) -> Result<State>
 pub fn new                  (name: &str)                     -> Result<State>
 pub fn new_from             (name: &str, storage_path: &str) -> Result<State>
 pub fn load                 (name: &str)                     -> Result<State>
 pub fn load_from            (name: &str, storage_path: &str) -> Result<State>
 pub fn destroy_state        (name: &str)
 pub fn destroy_state_from   (name: &str, storage_path: &str)

依赖项

~6.5–8.5MB
~163K SLoC