File: README.md

package info (click to toggle)
rust-cbor4ii 1.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 320 kB
  • sloc: makefile: 2
file content (53 lines) | stat: -rw-r--r-- 2,331 bytes parent folder | download
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
[![github actions](https://github.com/quininer/cbor4ii/workflows/CI/badge.svg)](https://github.com/quininer/cbor4ii/actions)
[![crates](https://img.shields.io/crates/v/cbor4ii.svg)](https://crates.io/crates/cbor4ii)
[![license](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/quininer/cbor4ii/blob/master/LICENSE)
[![docs.rs](https://docs.rs/cbor4ii/badge.svg)](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).