1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
# CBOR 0x(4+4)9 0x49
[](https://github.com/quininer/cbor4ii/actions)
[](https://crates.io/crates/cbor4ii)
[](https://github.com/quininer/cbor4ii/blob/master/LICENSE)
[](https://docs.rs/cbor4ii/)
“The Concise Binary Object Representation (CBOR)
is a data format whose design goals include the possibility of extremely small code size,
fairly small message size, and extensibility without the need for version negotiation.”
see [rfc8949](https://www.rfc-editor.org/rfc/rfc8949.html)
## Compatibility
The `core` mod should be fully compatible with rfc8949,
but some extensions will not be implemented in this crate,
such as `datetime`, `bignum`, `bigfloat`.
The `serde` mod defines how Rust types should be expressed in CBOR,
which is not any standard,
so different crate may have inconsistent behavior.
This library is intended to be compatible with `serde_cbor`,
but will not follow some unreasonable designs of `serde_cbor`.
* `cbor4ii` will express the unit type as an empty array instead of null.
This avoids the problem that `serde_cbor` cannot distinguish between `None` and `Some(())`.
see <https://github.com/pyfisch/cbor/issues/185>
* `cbor4ii` does not support packed mode, and it may be implemented in future,
but it may not be compatible with `serde_cbor`.
If you want packed mode, you should look at `bincode`.
## Performance
It is not specifically optimized for performance in implementation,
but benchmarks shows that its performance is slightly better than `serde_cbor`.
And it supports zero-copy deserialization and `deserialize_ignored_any` of serde,
so in some scenarios it may perform better than crate that do not support such feature.
## Robustness
The decode part has been fuzz tested,
and it should not crash or panic during the decoding process.
The decode of serde module has a depth limit
to prevent stack overflow or OOM caused by specially constructed input.
If you want to turn off deep inspection or adjust parameters,
you can implement the `dec::Read` trait yourself.
# License
This project is licensed under [the MIT license](LICENSE).
|