1
Fork 0
framed-rs/decode/README.md
2017-12-30 02:16:31 +00:00

96 lines
3 KiB
Markdown

# `framed_decode`
A command line utility to decode data encoded with the `framed` crate.
Clone this repository then run `framed-rs/bin/decode_typed` to use the tool.
## framed-rs/bin/decode_typed
This command decodes a serialized struct encoded with the
[`framed::typed`][typed] module. It requires the struct to implement
the `serde::Deserialize` and `std::fmt::Debug` traits.
[typed]: https://docs.rs/framed/*/framed/typed/index.html
Note: you must install [`jq`][jq] and have it on your path.
[jq]: https://stedolan.github.io/jq/
On Ubuntu you can install it with: `sudo apt install jq`.
Here's an example. The main binary in crate `framed_test_type` writes
a serialized and encoded `framed_test_type::Test` struct to stdout;
first save that to a file:
```text
~/framed-rs % cargo run -p framed_test_type > test_data
# The Test value is printed to stderr:
test_type/main.rs: Sending sample value: Test {
a: 1,
b: 2
}
```
Set environment variables to configure the type to deserialize and the
crate it's in, then pipe the test data to decode_typed. Note that the
serialized data is not self describing, so if you configure the wrong
type you will get garbage data out.
```text
~/framed-rs % export DECODE_TYPE_CRATE_DIR=test_type;
~/framed-rs % export DECODE_TYPE_NAME=framed_test_type::Test;
~/framed-rs % < test_data bin/decode_typed
# Some build output:
Compiling framed_test_type v0.1.0 (file:///home/user/framed-rs/test_type)
Compiling framed_decode v0.1.0 (file:///home/user/framed-rs/decode)
# decode logs each received value to stdout:
decode/main.rs: received value of type framed_test_type::Test: Test {
a: 1,
b: 2
}
```
`decode_typed` first builds the type crate with `cargo rustc` then
builds and runs `framed-rs/decode` linked to it. To configure the type
crate build pass cargo arguments in the environment variable
`DECODE_TYPE_CARGO_FLAGS` and rustc arguments in
`DECODE_TYPE_RUSTC_FLAGS`. To configure the decode tool build pass
cargo arguments in `DECODE_BIN_CARGO_FLAGS` and rustc arguments in
`DECODE_BIN_RUSTC_FLAGS`.
`decode_typed` passes command line arguments to the `framed_decode`
crate's binary; run `decode_typed --help` to see all the possible arguments:
```text
~/framed-rs % bin/decode_typed --help
framed_decode 0.1.0
Alex Helfet <alex.helfet@gmail.com>
`framed` sends and receives data over lossy streams of bytes.
`framed_decode` is a command line tool to decode data encoded by the `framed` library.
USAGE:
decode-5aa7aaf9ea94963a [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--out-format <out-format>
Output format type used to write data to stdout. [default: Debug] [values:
Csv, Debug, Json]
```
To customize the output for your type, try creating a tuple struct
with a custom Debug implementation. See `CustomDebug` in test_type for
an example:
```text
~/framed-rs % export DECODE_TYPE_NAME=framed_test_type::CustomDebug;
~/framed-rs % < test_data bin/decode_typed
CustomDebug a=0x000000ff, b=0x2
```