#executable #user #configuration #embedding #anything #experimental #conf

conf-embed

一个实验性的 Rust crate,用于将用户配置(或任何内容)嵌入程序的可执行文件中

4 个版本

0.1.3 2019年5月20日
0.1.2 2019年5月18日
0.1.1 2019年5月18日
0.1.0 2019年5月18日

#556 in 配置

Apache-2.0

10KB
75

conf-embed

一个实验性的 Rust crate,用于将用户配置(或任何内容)嵌入程序的可执行文件中。

它基本上做了描述中所说的。它允许您获取和更改存储在程序可执行文件中的某些数据,这意味着您不需要使用任何额外的文件来存储用户配置。

注意:此 crate 是半稳定的,但由于其性质,它也是不安全的。请谨慎使用。

例如:要使用此 crate,您首先设置一个配置(这可以是任何字符串切片,但在此情况下我使用 JSON 数据)

conf_embed::new_config("{\"arbitrary_data\": \"arbitrary_value\"").unwrap();

当运行此命令时,将生成一个新的具有与当前相同名称的可执行文件,并将当前的一个重命名为带有 .old 的结尾。

例如,如果上面的代码在 test.exe 上运行,则当前的 test.exe 将重命名为 test.exe.old,并且 test.exe 将更新为新的配置。

要获取配置,只需使用

println!("Current config: '{}'", conf_embed::get_config().unwrap());

这同样适用于所有平台。

此外,上述两个函数都返回一个 io::Result<()>,这意味着错误可以像这样传播

use std::io;
use std::process;

fn main() -> io::Result<()> {
	println!("Current config: '{}'", conf_embed::get_config()?);

	println!("Enter a new config:");

	let mut buf = String::new();
	io::stdin().read_line(&mut buf)?;

	println!("Setting new config...");
	conf_embed::new_config(&buf)?;
	println!("Config set, exiting.");
	process::exit(0);
}

当使用此 crate 时,您应该知道一些限制。

首先,字符串 ----CONFIG-REF-START---- 必须不在配置集中。如果是,将返回 Err

此外,配置末尾之后的所有 0 序列都将被忽略。例如:如果您的配置是 test test0000000,则它将解释为 test test

最后,配置必须不超过 2024 字节。此限制是为了安全、速度,以及保持二进制文件大小小。

无运行时依赖项