3 个不稳定版本
0.2.1 | 2022年11月25日 |
---|---|
0.2.0 | 2022年11月2日 |
0.1.0 | 2021年4月10日 |
#1514 in 编码
14KB
211 代码行
瘙痒
将一种数据格式转换为另一种数据格式(懂了吗?)
一个非常简单的 cli 工具,用于在大多数常见的纯文本数据格式之间进行转换。它不能执行理论上可能的所有转换,但会尽力而为
安装
itch
目前不提供二进制下载,必须从源代码构建。您可以使用 rustup 来获取 Rust 工具链,并运行以下命令下载和安装瘙痒
cargo install --force --git https://github.com/FreddieRidell/itch.git
概述
USAGE:
itch [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-f, --from <from-type> Format of the input, will be derived if possible
-i, --input <input> Path to the input file, leave empty for stdin
-o, --output <output> Path to the output file, leave empty for stdout
-t, --to <to-type> Format of the output, will be derived if possible
itch
可以从文件或 std in 中获取输入,并将输出到文件或 std out。如果给定文件作为输入或输出,它将尝试自动检测格式。itch
不会对数据进行任何操作以满足不同格式可以表达的不同构造;因此,无法保证转换将成功。
格式
第一类
都可以作为源和目标非常可靠地使用
- json
- toml
- yaml
第二类
有些不可靠,但可用于基本转换
- URL 查询字符串
- xml
行为
itch
在给定相同输入时始终会产生相同的输出
输入
echo '<element key="value"><child/></element>'
| itch -f xml -t json
输出
{ "key": "value", "child": {} }
itch
不一定会产生可以自动反转的输出
输入
echo '<element key="value"><child/></element>'
| itch -f xml -t json
| itch -f json -t xml
输出
<key>value</key><child></child>
实现
使用 serde 和它自己的内部数据表示格式作为不同数据格式之间的中介
enum Itch {
Obj(IndexMap<String, Itch>),
Array(Vec<Itch>),
Bool(bool),
Int(i64),
Float(f64),
Text(String),
}
每个反序列化步骤转换为此类型,每个序列化步骤从它转换。
依赖关系
~5MB
~95K SLoC