minicbor-ser

This repository provides a simple implementation of [serde] for [minicbor], making it easier to use.

Quick start

Just like using other serde derived libraries:

toml [dependencies] minicbor-ser = "0.1.*"

```rust use minicbor_ser as cbor; use serde::Serialize; fn main(){ #[derive(Debug, Serialize)] struct TestStruct { hello: String, }

let test_struct = TestStruct {
        hello: "world".to_string(),
};

let value = cbor::to_vec(&test_struct).unwrap();
assert_eq!(
    [0xA1u8, 0x65, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x65, 0x77, 0x6F, 0x72, 0x6C, 0x64],
    value.as_slice(),
)

} ```

`` By default, structs will be serialized asmapand tuples will be serialized asarray. If you don't want to wrap top-level struct and tuple with map and array, you can usetovecflat. To deserialize you should usefromsliceflat`.

```rust let expect = [0x01u8, 0x18, 0xff, 0x65, 0x68, 0x65, 0x6c, 0x6c, 0x6f]; let tupleflatten = (0x01u8, 0xffu8, "hello"); let value = tovecflat(&tupleflatten).unwrap(); asserteq!( expet, value.asslice(), )

let data = crate::tovecflat(&exp).unwrap(); let value = fromsliceflat(&data).unwrap(); assert_eq!(exp, value);

```

Type mapping table

The following represents how the minicbor-ser will map the types of Rust and CBOR - ❌ : Not support - ⚠ : Not perfect yet

| Rust | CBOR | | :--------------: | :-------------------------------: | | unsigned integer | unsigned integer | | negative Integer | negative Integer | | u128 | ❌ | | i128 | ❌ | | &str | String | | String | String | | struct | map (if flatten_top is false) | | Map | map | | slice | array (if flatten_top is false) | | &[u8] | bytes | | tuple | array (if flatten_top is false) | | Vec | array (if flatten_top is false) | | newtype variant | map | | unit variant | String | | tuple variant | array | | struct variant | map |

no-std

The current no-std feature of minicbor-ser requires alloc. If your machine cannot use alloc, it is recommended that you use the derive feature that comes with minicbor.
To enable no-std, use :

toml [dependencies] minicbor-ser = { version = "0.1.*", default-features = false }

Note

Some types of serialization and deserialization may be different from minicbor, depending on how minicbor is implemented. If you need the default implementation of minicbor, please use minicbor_ser::cbor to access its API.