rmpp 0.1.10

Precise types for RMP
Documentation
# RMPP - Rust MessagePack Precise 📐
RMPP is a pure Rust MessagePack implementation based on [RMP](https://crates.io/crates/rmp) crate. It aims to accurately preserve the original types metadata in **Rust** as well as **JavaScript**. It's incredibly useful in cases the data is sensitive to strict typing.

---

## Rust 🦀
You can install the crate using the following cargo command:
```sh
cargo add rmpp
```

Sample unpack usage:
```rust
use rmpp;

let binary: Vec<u8> = vec![
    0x82, 0xA3, 0x69, 0x6E, 0x74, 0x01, 0xA5,
    0x66, 0x6C, 0x6F, 0x61, 0x74, 0xCB, 0x3F,
    0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
];

let json_string: String = rmpp::unpack_json(&binary, Some(true))?;
```

Sample pack usage:
```rust
use rmpp;

let rmpp_json: String = r###"
{
    "raw_marker": 195,
    "basic_type": "Bool",
    "data": {
        "type": "Bool",
        "value": true
    }
}
"###;

let vec: Vec<u8> = rmpp::pack_json(json);
assert_eq!(vec![0xC3], vec);
```

The crate also provides a handy `MsgPackEntry` type that `rmpp::pack()` and `rmpp::unpack()` work with.

---

## JavaScript ⭐
You can install the package using the following npm command:
```sh
npm i rmpp
```

Sample unpack usage:
```ts
import { unpack_json } from 'rmpp';

const binary: Uint8Array = new Uint8Array([
    0x82, 0xA3, 0x69, 0x6E, 0x74, 0x01, 0xA5,
    0x66, 0x6C, 0x6F, 0x61, 0x74, 0xCB, 0x3F,
    0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
]);

const jsonString: string = unpack_json(binary);
```

Sample pack usage:
```ts
import { pack_json } from 'rmpp';

const rmppJson: string = `
{
    "raw_marker": 195,
    "basic_type": "Bool",
    "data": {
        "type": "Bool",
        "value": true
    }
}`;

let array: Uint8Array = pack_json(rmppJson);
console.assert(array[0] == 0xC3);
```

---

## Json format 🗃️
Previous unpack examples produce a json string that looks something like the following. It preserves all of the important metadata you might need. The `pack_json` method operates on json strings formatted like that.
```json
{
  "raw_marker": 130,
  "basic_type": "Map",
  "data": {
    "type": "FixMap",
    "value": [
      [
        {
          "raw_marker": 163,
          "basic_type": "String",
          "data": {
            "type": "FixStr",
            "value": "int"
          }
        },
        {
          "raw_marker": 1,
          "basic_type": "Number",
          "data": {
            "type": "FixPos",
            "value": 1
          }
        }
      ],
      [
        {
          "raw_marker": 165,
          "basic_type": "String",
          "data": {
            "type": "FixStr",
            "value": "float"
          }
        },
        {
          "raw_marker": 203,
          "basic_type": "Number",
          "data": {
            "type": "F64",
            "value": 1.0
          }
        }
      ]
    ]
  }
}
```

That's about it!