#convert #format-conversion #tool #serde #interchange #command-line-tool #cli

bin+lib 瘙痒

A cli tool for InTerCHanging between different serialized data formats

3 个不稳定版本

0.2.1 2022年11月25日
0.2.0 2022年11月2日
0.1.0 2021年4月10日

#1514 in 编码

MIT 许可证

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