#converter #serde #cli

app reserde

基于 Serde 的 CLI 文档转换器(Bencode、CBOR、JSON、TAML、x-www-form-urlencoded 等。)

4 个版本

0.0.4 2021 年 10 月 21 日
0.0.3 2021 年 10 月 21 日
0.0.2 2021 年 8 月 1 日
0.0.1 2020 年 8 月 26 日

编码 中排名 #976

MIT/Apache

23KB
429 行(不包括注释)

reserde

Lib.rs Crates.io Docs.rs

Rust 1.53 CI Crates.io - License

GitHub open issues open pull requests good first issues

crev reviews Zulip Chat

基于 Serde 的文档转换器。

安装

您可以使用 Cargo 安装 reserde

cargo install reserde

用法

reserde --help
reserde 0.0.4
Transcode a self-describing format into a different format.

Currently supports Bencode, Bincode (--out only), CBOR, JSON (--pretty), TAML (--in only), XML, x-www-form-urlencoded
(as urlencoded) and YAML. All names are lowercase.

USAGE:
    reserde.exe [FLAGS] [OPTIONS] --in <in-format> --out <out-format>

FLAGS:
        --enum-bools
            case-insensitively convert unit variants with name `true` or `false` into booleans

    -h, --help
            Prints help information

    -p
            pretty-print (where supported)

    -V, --version
            Prints version information


OPTIONS:
        --if <in-file>
            where to read input from. Defaults to stdin

    -i, --in <in-format>
            what to read [possible values: bencode, cbor, json, taml, urlencoded, xml, yaml]

        --of <out-file>
            where to write output to. Defaults to stdout

    -o, --out <out-format>
            what to write [possible values: bencode, bincode, cbor, json, urlencoded, xml, yaml]

    -s <stringify>...
            stringify bytes and non-string value keys into strings where possible. (Tries encodings in the order
            specified.) [try with: --in bencode] [possible values: utf8]

示例

转换 .torrent 文件

reserde -i bencode -o json --stringify utf8 --if manjaro-xfce-21.0.7-210614-linux510.iso.torrent

输出(摘录)

{
  "announce": "udp://tracker.opentrackr.org:1337",
  "created by": "mktorrent 1.1",
  "creation date": 1623684209,
  "info": {
    "length": 2600828928,
    "name": "manjaro-xfce-21.0.7-210614-linux510.iso",
    "piece length": 2097152,
    "pieces": [
      128,
      236,
      36,
      37,
      10,
      
    ]
  },
  "url-list": "https://download.manjaro.org/xfce/21.0.7/mfce/21.0.7/manjaro-xfce-21.0.7-210614-linux51anjaro-xfce-21.0.7-210614-linux510.iso"
}

TAML 转换 YAML

reserde -i taml -o yaml
# [soundscapes]
// Sewer

## [[loops].{sound, volume}]
"$sewer/amb_drips", 0.8
"$sewer/amb_flies", 0.1
"$sewer/amb_hum", 0.05 // postfix comment

## [moments]
sound: "$sewer/moments/*"
layers: 1
first-interval-no-min: true
interval-range: (10, 60)
volume-range: (0.1, 0.15)

##
`spaced \` identifier`: "asdhasd kjhdajkh"
---
soundscapes:
  - loops:
      - sound: $sewer/amb_drips
        volume: 0.8
      - sound: $sewer/amb_flies
        volume: 0.1
      - sound: $sewer/amb_hum
        volume: 0.05
    moments:
      - sound: $sewer/moments/*
        layers: 1
        first-interval-no-min: true
        interval-range:
          - 10
          - 60
        volume-range:
          - 0.1
          - 0.15
    "spaced ` identifier": asdhasd kjhdajkh

(注释通常会被删除,因为它们无法通过 Serde 的接口传输。)

TAML 转换 XML

reserde -i taml -o xml
# [enums]: Structured
field_1: true
field_2: false

# [[enums]]
Tuple(1, 2, 3)
Unit
EmptyTuple()
<enums><Structured field_1="true" field_2="false"/><Tuple>1</Tuple><Tuple>2</Tuple><Tuple>3</Tuple><Unit/></enums>

许可证

在以下任一许可证下发布:

供您选择。

贡献

除非您明确声明,否则您有意提交的任何贡献,按照 Apache-2.0 许可证定义,应作为上述双许可发布,不附加任何额外条款或条件。

有关更多信息,请参阅 CONTRIBUTING

行为准则

变更日志

版本控制

reserde 严格遵循 语义版本控制 2.0.0,但有以下例外

  • 在主版本变更时,次要版本不会重置为 0(除了 v1)。
    将其视为全局功能级别。
  • 在主版本或次要版本变更时,补丁版本不会重置为 0(除了 v0.1 和 v1)。
    将其视为全局补丁级别。

这包括上述指定的 Rust 版本要求。
早期 Rust 版本可能兼容,但可能在次要版本或补丁版本中发生变化。

受功能和补丁影响的版本可以通过 CHANGELOG.md 中的相应标题确定。

请注意,此包的依赖项可能具有更宽容的 MSRV 政策!如果您不手动生成 Cargo.lock(或必要时生成)并且需要支持比当前稳定版本更旧的编译器,请在您的自动化中使用 cargo +nightly update -Z minimal-versions

依赖项

~9.5MB
~150K SLoC