Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
b9bffdc19c | |||
9f5cbd7d07 | |||
971a19a6e0 | |||
91d5fc666f | |||
f5b2a25eaf | |||
ceb10fabd9 | |||
7c7ab52379 | |||
75ca5735a8 | |||
6a4fbe3098 | |||
20022a54e8 | |||
f17e13fe25 | |||
d13a167ac8 | |||
2e75ffea68 |
390
Cargo.lock
generated
390
Cargo.lock
generated
@ -2,6 +2,21 @@
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "addr2line"
|
||||
version = "0.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "adler"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
||||
|
||||
[[package]]
|
||||
name = "atty"
|
||||
version = "0.2.14"
|
||||
@ -19,24 +34,71 @@ version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.66"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7"
|
||||
dependencies = [
|
||||
"addr2line",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"miniz_oxide",
|
||||
"object",
|
||||
"rustc-demangle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
|
||||
|
||||
[[package]]
|
||||
name = "bendy"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8133e404c8bec821e531f347dab1247bf64f60882826e7228f8ffeb33a35a658"
|
||||
dependencies = [
|
||||
"failure",
|
||||
"serde",
|
||||
"serde_bytes",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "block-buffer"
|
||||
version = "0.10.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.74"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "581f5dba903aac52ea3feb5ec4810848460ee833876f1f9b0fdeab1f19091574"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "3.2.20"
|
||||
@ -76,6 +138,73 @@ dependencies = [
|
||||
"os_str_bytes",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cpufeatures"
|
||||
version = "0.2.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crypto-common"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.10.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c"
|
||||
dependencies = [
|
||||
"block-buffer",
|
||||
"crypto-common",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "failure"
|
||||
version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"failure_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "failure_derive"
|
||||
version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.14.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
|
||||
dependencies = [
|
||||
"typenum",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.26.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.12.3"
|
||||
@ -119,12 +248,38 @@ version = "1.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
|
||||
|
||||
[[package]]
|
||||
name = "json5"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1"
|
||||
dependencies = [
|
||||
"pest",
|
||||
"pest_derive",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.132"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.5.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
|
||||
dependencies = [
|
||||
"adler",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-bigint"
|
||||
version = "0.4.3"
|
||||
@ -155,6 +310,15 @@ dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.14.0"
|
||||
@ -167,6 +331,73 @@ version = "6.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
|
||||
|
||||
[[package]]
|
||||
name = "paste"
|
||||
version = "1.0.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1"
|
||||
|
||||
[[package]]
|
||||
name = "percent-encoding"
|
||||
version = "2.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
|
||||
|
||||
[[package]]
|
||||
name = "pest"
|
||||
version = "2.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb779fcf4bb850fbbb0edc96ff6cf34fd90c4b1a112ce042653280d9a7364048"
|
||||
dependencies = [
|
||||
"thiserror",
|
||||
"ucd-trie",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pest_derive"
|
||||
version = "2.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "502b62a6d0245378b04ffe0a7fb4f4419a4815fce813bd8a0ec89a56e07d67b1"
|
||||
dependencies = [
|
||||
"pest",
|
||||
"pest_generator",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pest_generator"
|
||||
version = "2.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "451e629bf49b750254da26132f1a5a9d11fd8a95a3df51d15c4abd1ba154cb6c"
|
||||
dependencies = [
|
||||
"pest",
|
||||
"pest_meta",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pest_meta"
|
||||
version = "2.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bcec162c71c45e269dfc3fc2916eaeb97feab22993a21bcce4721d08cd7801a6"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"pest",
|
||||
"sha1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-crate"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"thiserror",
|
||||
"toml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error"
|
||||
version = "1.0.4"
|
||||
@ -209,6 +440,28 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rmp"
|
||||
version = "0.8.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"num-traits",
|
||||
"paste",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rmp-serde"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "25786b0d276110195fa3d6f3f31299900cf71dfbd6c28450f3f58a0e7f7a347e"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"rmp",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ron"
|
||||
version = "0.8.0"
|
||||
@ -220,6 +473,12 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.11"
|
||||
@ -257,6 +516,15 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_bytes"
|
||||
version = "0.11.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cfc50e8183eeeb6178dcb167ae34a8051d63535023ae38b5d8d12beae193d37b"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.144"
|
||||
@ -279,6 +547,17 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_qs"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8cac3f1e2ca2fe333923a1ae72caca910b98ed0630bb35ef6f8c8517d6e81afa"
|
||||
dependencies = [
|
||||
"percent-encoding",
|
||||
"serde",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_yaml"
|
||||
version = "0.9.11"
|
||||
@ -292,6 +571,23 @@ dependencies = [
|
||||
"unsafe-libyaml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sha1"
|
||||
version = "0.10.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cpufeatures",
|
||||
"digest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "static_assertions"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.10.0"
|
||||
@ -309,6 +605,18 @@ dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "synstructure"
|
||||
version = "0.12.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.1.3"
|
||||
@ -325,24 +633,77 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
|
||||
|
||||
[[package]]
|
||||
name = "tradaf"
|
||||
version = "0.1.0"
|
||||
name = "thiserror"
|
||||
version = "1.0.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85"
|
||||
dependencies = [
|
||||
"thiserror-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror-impl"
|
||||
version = "1.0.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.5.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tradaf"
|
||||
version = "0.1.1"
|
||||
dependencies = [
|
||||
"bendy",
|
||||
"byteorder",
|
||||
"clap",
|
||||
"json5",
|
||||
"rmp-serde",
|
||||
"ron",
|
||||
"serde",
|
||||
"serde-pickle",
|
||||
"serde-transcode",
|
||||
"serde_json",
|
||||
"serde_qs",
|
||||
"serde_yaml",
|
||||
"zvariant",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typenum"
|
||||
version = "1.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
|
||||
|
||||
[[package]]
|
||||
name = "ucd-trie"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
|
||||
|
||||
[[package]]
|
||||
name = "unsafe-libyaml"
|
||||
version = "0.2.2"
|
||||
@ -385,3 +746,28 @@ name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "zvariant"
|
||||
version = "3.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1bd68e4e6432ef19df47d7e90e2e72b5e7e3d778e0ae3baddf12b951265cc758"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"libc",
|
||||
"serde",
|
||||
"static_assertions",
|
||||
"zvariant_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zvariant_derive"
|
||||
version = "3.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08e977eaa3af652f63d479ce50d924254ad76722a6289ec1a1eac3231ca30430"
|
||||
dependencies = [
|
||||
"proc-macro-crate",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
18
Cargo.toml
18
Cargo.toml
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "tradaf"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
authors = ["Zykino <Zykino@users.noreply.github.com>"]
|
||||
description = "Tranduit Data Format: Translate serialized data from one format to another."
|
||||
license = "GPL-3.0-or-later"
|
||||
@ -16,18 +16,30 @@ edition = "2021"
|
||||
[dependencies]
|
||||
# TODO: handle errors (or pass them to main) instead of unwrapping
|
||||
#anyhow = "1.0.64"
|
||||
clap = { version = "3.2.20", features = ["derive"] }
|
||||
clap = { version = "3.2", features = ["derive"] }
|
||||
# TODO: May be used to "deserialize any" if I understood correctly. (Or maybe `typetag`?) But I did not achieved to make it work with serde-transcode
|
||||
#erased-serde = "0.3.23"
|
||||
serde = "1.0"
|
||||
serde-transcode = "1.1.1"
|
||||
serde-transcode = "1.1"
|
||||
|
||||
# Data types we support
|
||||
# Should tend to be equal to the official list of data formats supported by serde: https://serde.rs/#data-formats
|
||||
bendy = { version = "0.3", features = ["std", "serde"] }
|
||||
#bson = "2.3"
|
||||
#ciborium = "0.2"
|
||||
#serde_dynamo = "4.0" # `Serializer` and `Deserializer` exposed does not provieded required API.
|
||||
#envy = "0.4" # No `Deserializer` exposed.
|
||||
#envy-store = "0.1" # No `Deserializer` exposed.
|
||||
#flexbuffers = "2.0" # `Serializer` and `Deserializer` exposed does not provieded required API.
|
||||
#deser-hjson = "1.0" # No `Deserializer` exposed.
|
||||
serde_json = "1.0"
|
||||
json5 = "0.4"
|
||||
#serde-lexpr = "0.1"
|
||||
serde-pickle = "1.0"
|
||||
serde_qs = "0.10"
|
||||
rmp-serde = "1.1"
|
||||
ron = "0.8"
|
||||
#toml = "0.5"
|
||||
serde_yaml = "0.9"
|
||||
zvariant = "3.6" # D-Bus & GVariant # TODO: try to implement it with the from signature?
|
||||
byteorder = "1.3" # required by zvariant
|
||||
|
39
README.md
39
README.md
@ -22,3 +22,42 @@ Transcode into JSON so we can use `jq`, do some transformations and then transco
|
||||
```sh
|
||||
tradaf RON json < examples/gameConfig.ron | jq .key_bindings | tradaf Json yaml
|
||||
```
|
||||
|
||||
# TODOS
|
||||
* [ ] Implement all [data formats](https://serde.rs/#data-formats), or at least the one that expose a serde serializer or deserializer.
|
||||
* [-] Bencode
|
||||
* [X] 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
|
||||
* [X] JSON
|
||||
* [-] JSON5
|
||||
* [X] Deserialization
|
||||
* [ ] Serialization
|
||||
* [ ] https://github.com/Lucretiel/kaydle
|
||||
* [ ] S-Expressions (lisp)
|
||||
* [X] Pickle
|
||||
* [ ] Test properly both way
|
||||
* [-] Query String (URL)
|
||||
* [ ] Deserialization
|
||||
* [X] Serialization
|
||||
* [-] MessagePack
|
||||
* [ ] Deserialization
|
||||
* [X] Serialization
|
||||
* [X] RON
|
||||
* [ ] TOML
|
||||
* [X] 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)
|
||||
|
@ -3,6 +3,12 @@
|
||||
CURRENT_VERSION=$(grep -E "^version\s?=" Cargo.toml | cut --delimiter='"' --fields=2)
|
||||
TAG="v$CURRENT_VERSION"
|
||||
|
||||
cargo fmt
|
||||
|
||||
if ! cargo test; then
|
||||
exit $?
|
||||
fi
|
||||
|
||||
if cargo publish --dry-run; then
|
||||
echo "Creating tag: $TAG"
|
||||
echo "Do not forget to push it: git push origin $TAG"
|
||||
|
210
src/lib.rs
210
src/lib.rs
@ -1,6 +1,9 @@
|
||||
use clap::{Parser, ValueEnum};
|
||||
use serde::de::Deserializer;
|
||||
use std::io::{Read, Write};
|
||||
use std::{
|
||||
convert::TryFrom,
|
||||
io::{Read, Write},
|
||||
};
|
||||
|
||||
#[derive(Debug, Parser)]
|
||||
#[clap(author, version, about, long_about = None)]
|
||||
@ -12,6 +15,11 @@ pub struct Opt {
|
||||
#[clap(value_enum, ignore_case = true)]
|
||||
pub output: Output,
|
||||
|
||||
#[clap(long, short = 'F', required_if_eq_any(&[("input", "d-bus"), ("input", "g-variant")]))]
|
||||
pub format_in: Option<String>,
|
||||
#[clap(long, short = 'f', required_if_eq_any(&[("output", "d-bus"), ("output", "g-variant")]))]
|
||||
pub format_out: Option<String>,
|
||||
|
||||
/// For data format compatible, a default pretty format is output instead of a minified one
|
||||
/// Output a pretty formated data instead of minified, only for format compatible
|
||||
#[clap(long, short)]
|
||||
@ -23,10 +31,19 @@ pub struct Opt {
|
||||
|
||||
#[derive(Copy, Clone, Debug, ValueEnum)]
|
||||
pub enum Input {
|
||||
Bencode,
|
||||
//Bson,
|
||||
//Cbor,
|
||||
DBus,
|
||||
//DynamoDB,
|
||||
//FlexBuffer,
|
||||
GVariant,
|
||||
Json,
|
||||
Json5,
|
||||
//SExpression,
|
||||
Pickle,
|
||||
//Qs, // NOTE: The crate is not noted "(serialization only)" on the [serde listing](https://serde.rs/#data-formats) but it does not expose a `Deserializer`
|
||||
//Rmp, // NOTE: It appears that we are forced to deserialize into a concrete type
|
||||
Ron,
|
||||
//Toml
|
||||
Yaml,
|
||||
@ -34,18 +51,25 @@ pub enum Input {
|
||||
|
||||
#[derive(Copy, Clone, Debug, ValueEnum)]
|
||||
pub enum Output {
|
||||
//Bencode,
|
||||
//Bson,
|
||||
//Cbor,
|
||||
DBus,
|
||||
//DynamoDB,
|
||||
//FlexBuffer,
|
||||
GVariant,
|
||||
Json,
|
||||
//Json5, // NOTE: The crate is not noted "(deserialization only)" on the [serde listing](https://serde.rs/#data-formats) but it does not expose a `Serializer`
|
||||
//SExpression,
|
||||
Pickle,
|
||||
Qs,
|
||||
Rmp,
|
||||
Ron,
|
||||
//Toml,
|
||||
Yaml,
|
||||
}
|
||||
|
||||
pub fn transcode(opt: Opt, input: &mut dyn Read, output: &mut dyn Write) {
|
||||
// A JSON deserializer. You can use any Serde Deserializer here.
|
||||
|
||||
de(&opt, input, output);
|
||||
|
||||
// TODO: I would love to be able to have `de` and `ser` return the correct
|
||||
@ -62,14 +86,74 @@ pub fn transcode(opt: Opt, input: &mut dyn Read, output: &mut dyn Write) {
|
||||
|
||||
fn de(opt: &Opt, input: &mut dyn Read, output: &mut dyn Write) {
|
||||
match opt.input {
|
||||
Input::Bencode => {
|
||||
use bendy::serde::Deserializer;
|
||||
|
||||
let mut buf = vec![];
|
||||
let _buf_size = input.read_to_end(&mut buf).unwrap();
|
||||
let mut deserializer = Deserializer::from_bytes(&buf);
|
||||
ser(opt, &mut deserializer, output);
|
||||
}
|
||||
/*
|
||||
Input::Bson => {
|
||||
use bson::Deserializer;
|
||||
|
||||
let mut deserializer = bson::from_reader(input).unwrap(); // FIXME: need which type annotation?
|
||||
ser(opt, &mut deserializer, output);
|
||||
let deserializer = bson::from_reader(input).unwrap(); // FIXME: can we skip the type annotation?
|
||||
ser(opt, deserializer, output);
|
||||
}
|
||||
*/
|
||||
Input::DBus => {
|
||||
use zvariant::dbus::Deserializer;
|
||||
use zvariant::EncodingContext;
|
||||
use zvariant::Signature;
|
||||
|
||||
use byteorder::LE;
|
||||
|
||||
let sig = opt.format_in.clone().unwrap();
|
||||
let mut buf = String::new();
|
||||
let _buf_size = input.read_to_string(&mut buf).unwrap();
|
||||
let mut deserializer = Deserializer::new(
|
||||
buf.as_bytes(),
|
||||
None,
|
||||
&Signature::try_from(sig).unwrap(),
|
||||
EncodingContext::<LE>::new_dbus(0),
|
||||
);
|
||||
ser(opt, &mut deserializer, output);
|
||||
}
|
||||
/*
|
||||
Input::DynamoDB => {
|
||||
use serde_dynamo::Deserializer;
|
||||
|
||||
let deserializer = Deserializer::from(input); // from_reader(input);
|
||||
ser(opt, deserializer, output);
|
||||
}
|
||||
*/
|
||||
/*
|
||||
Input::FlexBuffer => {
|
||||
use serde_yaml::Deserializer;
|
||||
|
||||
let deserializer = Deserializer::from_reader(input);
|
||||
ser(opt, deserializer, output);
|
||||
}
|
||||
*/
|
||||
Input::GVariant => {
|
||||
use zvariant::gvariant::Deserializer;
|
||||
use zvariant::EncodingContext;
|
||||
use zvariant::Signature;
|
||||
|
||||
use byteorder::LE;
|
||||
|
||||
let sig = opt.format_in.clone().unwrap();
|
||||
let mut buf = String::new();
|
||||
let _buf_size = input.read_to_string(&mut buf).unwrap();
|
||||
let mut deserializer = Deserializer::new(
|
||||
buf.as_bytes(),
|
||||
None,
|
||||
&Signature::try_from(sig).unwrap(),
|
||||
EncodingContext::<LE>::new_dbus(0),
|
||||
);
|
||||
ser(opt, &mut deserializer, output);
|
||||
}
|
||||
Input::Json => {
|
||||
use serde_json::Deserializer;
|
||||
|
||||
@ -77,6 +161,24 @@ fn de(opt: &Opt, input: &mut dyn Read, output: &mut dyn Write) {
|
||||
let mut deserializer = Deserializer::from_reader(input);
|
||||
ser(opt, &mut deserializer, output);
|
||||
}
|
||||
Input::Json5 => {
|
||||
use json5::Deserializer;
|
||||
|
||||
// NOTE: Apparently Json5 do not implement `Deserializer` on const?
|
||||
// NOTE: Apparently Json5 do not implement `Deserializer::from_reader` but it can serialise into a writter…
|
||||
let mut buf = String::new();
|
||||
let _buf_size = input.read_to_string(&mut buf).unwrap();
|
||||
let mut deserializer = Deserializer::from_str(&buf).unwrap();
|
||||
ser(opt, &mut deserializer, output);
|
||||
}
|
||||
/*
|
||||
Input::SExpression => {
|
||||
use serde_lexpr as Deserializer;
|
||||
|
||||
let deserializer = Deserializer::from_reader(input).unwrap(); // FIXME: can we skip the type annotation?
|
||||
ser(opt, deserializer, output);
|
||||
}
|
||||
*/
|
||||
Input::Pickle => {
|
||||
use serde_pickle::Deserializer;
|
||||
|
||||
@ -108,6 +210,16 @@ where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
match opt.output {
|
||||
/*
|
||||
Output::Bencode => {
|
||||
use bendy::serde::Serializer;
|
||||
|
||||
let serializer = &mut Serializer::new(/*output*/);
|
||||
|
||||
serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
serializer.into_bytes();
|
||||
}
|
||||
*/
|
||||
/*
|
||||
Output::Bson => {
|
||||
use bson::Serializer;
|
||||
@ -119,10 +231,74 @@ where
|
||||
options.human_readable(false)
|
||||
};
|
||||
|
||||
let serializer = Serializer::new_with_options(options.build()); // FIXME: why no way to tell the serializer were we want the output?
|
||||
let serializer = Serializer::new_with_options(options.build()); // FIXME: why no way to tell the serializer were we want the output?
|
||||
serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
}
|
||||
*/
|
||||
Output::DBus => {
|
||||
use zvariant::dbus::Serializer;
|
||||
use zvariant::EncodingContext;
|
||||
use zvariant::Signature;
|
||||
|
||||
use byteorder::LE;
|
||||
|
||||
let sig = opt.format_out.clone().unwrap();
|
||||
let mut out = std::io::Cursor::new(vec![]);
|
||||
let mut fs = vec![];
|
||||
let serializer = &mut Serializer::new(
|
||||
&Signature::try_from(sig).unwrap(),
|
||||
&mut out,
|
||||
&mut fs, //None,
|
||||
EncodingContext::<LE>::new_dbus(0),
|
||||
);
|
||||
|
||||
//let mut buf = String::new();
|
||||
// let _buf_size = output.read_to_string(&mut buf).unwrap();
|
||||
// let mut deserializer = Deserializer::new();
|
||||
serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
}
|
||||
/*
|
||||
Output::DynamoDB => {
|
||||
use serde_dynamo::Serializer;
|
||||
|
||||
let serializer = &mut Serializer::new(output);
|
||||
|
||||
serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
}
|
||||
*/
|
||||
/*
|
||||
Output::FlexBuffer => {
|
||||
use flexbuffers::FlexbufferSerializer as Serializer;
|
||||
|
||||
let serializer = &mut Serializer::new(/*output*/);
|
||||
|
||||
// serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
let r = flexbuffers::Reader::get_root(serializer.view()).unwrap();
|
||||
println!("{}", r);
|
||||
}
|
||||
*/
|
||||
Output::GVariant => {
|
||||
use zvariant::gvariant::Serializer;
|
||||
use zvariant::EncodingContext;
|
||||
use zvariant::Signature;
|
||||
|
||||
use byteorder::LE;
|
||||
|
||||
let sig = opt.format_out.clone().unwrap();
|
||||
let mut out = std::io::Cursor::new(vec![]);
|
||||
let mut fs = vec![];
|
||||
let serializer = &mut Serializer::new(
|
||||
&Signature::try_from(sig).unwrap(),
|
||||
&mut out,
|
||||
&mut fs, //None,
|
||||
EncodingContext::<LE>::new_dbus(0),
|
||||
);
|
||||
|
||||
//let mut buf = String::new();
|
||||
// let _buf_size = output.read_to_string(&mut buf).unwrap();
|
||||
// let mut deserializer = Deserializer::new();
|
||||
serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
}
|
||||
Output::Json => {
|
||||
use serde_json::Serializer;
|
||||
|
||||
@ -140,6 +316,14 @@ where
|
||||
// NOTE: serde_json’s PrettyFormatter and CompactFormatter are incompatibles…
|
||||
// serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
}
|
||||
/*
|
||||
Output::SExpression => {
|
||||
use serde_lexpr::to_writer as Serializer;
|
||||
|
||||
let serializer = Serializer::new(output); // FIXME: There is a `to_writer` but the Serializer is not exposed directly.
|
||||
serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
}
|
||||
*/
|
||||
Output::Pickle => {
|
||||
use serde_pickle::Serializer;
|
||||
|
||||
@ -147,6 +331,20 @@ where
|
||||
|
||||
serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
}
|
||||
Output::Qs => {
|
||||
use serde_qs::Serializer;
|
||||
|
||||
let serializer = &mut Serializer::new(output);
|
||||
|
||||
serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
}
|
||||
Output::Rmp => {
|
||||
use rmp_serde::Serializer;
|
||||
|
||||
let serializer = &mut Serializer::new(output);
|
||||
|
||||
serde_transcode::transcode(deserializer, serializer).unwrap();
|
||||
}
|
||||
Output::Ron => {
|
||||
use ron::Serializer;
|
||||
|
||||
|
1
test-data/list.bencode
Normal file
1
test-data/list.bencode
Normal file
@ -0,0 +1 @@
|
||||
l4:spami42ee
|
12
test-data/shortExample.json5
Normal file
12
test-data/shortExample.json5
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
// comments
|
||||
unquoted: 'and you can quote me on that',
|
||||
singleQuotes: 'I can use "double quotes" here',
|
||||
lineBreaks: "Look, Mom! \
|
||||
No \\n's!",
|
||||
hexadecimal: 0xdecaf,
|
||||
leadingDecimalPoint: .8675309, andTrailing: 8675309.,
|
||||
positiveSign: +1,
|
||||
trailingComma: 'in objects', andIn: ['arrays',],
|
||||
"backwardsCompatible": "with JSON",
|
||||
}
|
@ -20,17 +20,45 @@ fn ron_to_json() {
|
||||
let opt = Opt {
|
||||
input: Input::Ron,
|
||||
output: Output::Json,
|
||||
|
||||
format_in: None,
|
||||
format_out: None,
|
||||
|
||||
pretty: true,
|
||||
no_newline: false,
|
||||
};
|
||||
|
||||
let input = example_to_vec("examples/materials.ron");
|
||||
let input = example_to_vec("test-data/materials.ron");
|
||||
|
||||
let mut output = vec![];
|
||||
transcode(opt, &mut input.as_slice(), &mut output);
|
||||
let out = String::from_utf8(output).unwrap();
|
||||
|
||||
let control = example_to_string("examples/materials.json");
|
||||
let control = example_to_string("test-data/materials.json");
|
||||
|
||||
assert_eq!(control, out);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn json5_read_json() {
|
||||
let opt = Opt {
|
||||
input: Input::Json5,
|
||||
output: Output::Json,
|
||||
|
||||
format_in: None,
|
||||
format_out: None,
|
||||
|
||||
pretty: true,
|
||||
no_newline: false,
|
||||
};
|
||||
|
||||
let input = example_to_vec("test-data/materials.json");
|
||||
|
||||
let mut output = vec![];
|
||||
transcode(opt, &mut input.as_slice(), &mut output);
|
||||
let out = String::from_utf8(output).unwrap();
|
||||
|
||||
let control = example_to_string("test-data/materials.json");
|
||||
|
||||
assert_eq!(control, out);
|
||||
}
|
||||
|
Reference in New Issue
Block a user