1 个不稳定版本

0.1.0 2023年7月12日

#2895 in 解析实现

MIT/Apache

29KB
597

picnic

PICNIC 是配置符号解释器/转换器 🦀

github

PICNIC

PICNIC 的名字由人工智能驱动,这立即让它值得一试

人类:请为一个解释配置文件并打印环境变量的 CLI 项目想一个递归的名字。

ChatGPT:这听起来像是一个有用的工具!给它取名叫 PICNIC 怎么样,代表 "PICNIC Is Config Notation Interpreter/Converter"。这个名字符合你想要的递归缩略词风格,同时也给人一种轻松简单的印象,就像使用这个工具处理各种配置文件格式一样轻松。

特性

✅ 从 json.env 文件中提取数据(很快会有 yamltomlcsvxml
✅ 与文件格式相同的语法匹配键
✅ 输出匹配的结果,或全部内容。使用 eval
✅ 可选地生成打印值的微小二进制文件(当不在 shell 脚本中时很有用,例如 Nix)

安装

crates.io

cargo install picnic-rs (我正在尝试获取 picnic 的所有权)

用法

一些 JSON 示例。其他格式的用法类似。使用 picnic --help 获取更多信息。

// some.json
{
  "foo": "bar",
  "baz": {
    "quz": "qork"
  },
  "boo": [
    "bah",
    {
      "lol": "lurg"
    }
  ]
}

$picnic some.json

输出

baz.quz=qork; export baz.quz;
boo.0=bah; export boo.0;
boo.1.lol=lurg; export boo.1.lol;
foo=bar; export foo;

评估输出以设置环境变量

eval $(picnic some.json)

⭐ 匹配模板

将你想要提取的值替换为 $ 变量

$picnic some.json --match '{"boo": [$BAH, "lol": $LURG] }'

输出

BAH=bah; export BAH;
LURG=lurg; export LURG;

类似地,评估输出以设置环境变量。

📝 自定义分隔符和大小写选项

$picnic some.json --separator _ --casingupper

输出

BAZ_QUZ=qork; export BAZ_QUZ;
BOO_0=bah; export BOO_0;
BOO_1_LOL=lurg; export BOO_1_LOL;
FOO=bar; export FOO;

💾 生成二进制文件

$picnic some.json --spawn/tmp

生成

$ ls /tmp
foo
baz.quz
boo.0
boo.1.lol

输出

$ ./foo
bar

$ ./baz.quz
qork

$ ./boo.0
bah

$ ./boo.1.lol
lurg

↩︎ 将 stdin 管道到 picnic

curl -o some.json http://config.com/some_json_i_know_not_to_be_malicious.json 
eval $(cat some.json | picnic)

贡献

欢迎贡献!请随意打开一个问题或提交一个 PR。

许可

Apache-2.0 和 MIT

免责声明

不要评估输出或从未知文件生成二进制文件!

依赖项

~5–7.5MB
~136K SLoC