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
30KB
460 行
非易失性 ─
非易失性是一个用于存储持久设置和配置数据的库。
非易失性状态是通过使用名称(通常为创建它的程序的名称)实例化一个 State
实例来创建的。任何设置的值都将写入到平台依赖的一些常见目录中。值将一直持续到它们被覆盖,并且可以通过加载该名称状态的任何程序访问。 State
实例是专有的(即,两个程序或同一程序的两个实例不能同时打开相同的 State
)。
大多数内置类型以及任何实现了 serde::Serialize
/Deserialize
的类型都可以传递到 State::set
和 State::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