#serde #serialization #conversion

bin+lib tradaf

Tranduit Data Format: Translate serialized data from one format to another

2 releases

0.1.1 Dec 4, 2022
0.1.0 Sep 18, 2022

#215 in #conversion

GPL-3.0-or-later

20KB
281 lines

Description

This tool "traduit" (french for translate) data formats. It was made in the hope to bring serde to the cli (serdi ^^). But that not exaclty what serde is about and I have no affiliation with them so I did not want to namesquat.

Installation

First install the rust toolchain and then execute the following command:

cargo install tradaf

Usage example

Prettify (or minify) some data format for ease of reading (resp: compact and have less data to save/transfert)

tradaf json json --pretty < simple.json 

Litterally transcode between data formats

tradaf ron yaml < examples/standard.ron

Transcode into JSON so we can use jq, do some transformations and then transcode again into another format for viewing

tradaf RON json < examples/gameConfig.ron | jq .key_bindings | tradaf Json yaml

TODOS

  • Implement all data formats, or at least the one that expose a serde serializer or deserializer.
    • Bencode
      • Deserialization
      • Serialization
    • BSON
    • CBOR
    • DBus (not sure it is working, but it compile…)
    • DynamoDB
    • Envy (deserialization only)
    • Envy store (deserialization only)
    • FlexBuffer
      • The Serializer and Deserializer exposed does not work with serde-transcode.
    • GVariant => See DBus: the same crate propose both
    • HJSON
    • JSON
    • JSON5
      • Deserialization
      • Serialization
    • https://github.com/Lucretiel/kaydle
    • S-Expressions (lisp)
    • Pickle
      • Test properly both way
    • Query String (URL)
      • Deserialization
      • Serialization
    • MessagePack
      • Deserialization
      • Serialization
    • RON
    • TOML
    • YAML
  • Add tests for each serializer and each deserializer (at least one)
  • Check if crates have features that we should enable/disable
    • zvariant looks to include async runtime by default
  • Check my notes for each data format and open an issue on the crates to point problem/present my project and ask for help
  • Add proper error handling (find a mentor to explain me propper error management: struct, enum, … and then use anyhow/this_error if needed)

Dependencies

~9.5MB
~194K SLoC