Home

Awesome

Funding

This library was originally incentivized by ICDevs. You can view more about the bounty on the forum or website. The bounty was funded by The ICDevs.org commuity and the award paid to @Gekctek. If you use this library and gain value from it, please consider a donation to ICDevs.

Overview

This is a library that is written in Motoko that enables the encoding and decoding of CBOR between bytes and a CBOR variant type

Package

MOPS

mops install cbor

To setup MOPS package manage, follow the instructions from the MOPS Site

Usage

Cbor Bytes -> Cbor Object

import Types "mo:cbor/Types";
import Decoder "mo:cbor/Decoder";

let bytes: [Nat8] = [0xbf, 0x63, 0x46, 0x75, 0x6e, 0xf5, 0x63, 0x41, 0x6d, 0x74, 0x21, 0xff];
let cbor: Types.Value = switch(Decoder.decodeBytes(bytes)) {
    case (#err(e)) ...;
    case (#ok(c)) c;
};

Cbor Object -> Cbor Bytes

import Types "mo:cbor/Types";
import Encoder "mo:cbor/Encoder";

let bytes: Types.Value = #majorType5([
    (#majorType3("Fun"), #majorType7(#bool(true))),
    (#majorType3("Amt"), #majorType1(-2))
]);
let bytes: [Nat8] = switch(Encoder.encode(bytes)) {
    case (#err(e)) ...;
    case (#ok(c)) c;
};

Custom Type -> Cbor Bytes

Not Yet Implemented use to_candid(...). See https://internetcomputer.org/docs/current/developer-docs/build/cdks/motoko-dfinity/language-manual#candid-serialization

Cbor Bytes -> Custom Type

Not Yet Implemented use from_candid(...). See https://internetcomputer.org/docs/current/developer-docs/build/cdks/motoko-dfinity/language-manual#candid-serialization

API

Decoder.mo

decode(blob: Blob) : Result.Result<Types.Value, Types.DecodingError>

Decodes a blob into a cbor value variant

decodeBytes(bytes: Iter.Iter<Nat8>) : Result.Result<Types.Value, Types.DecodingError>

Decodes a series of bytes into a cbor value variant

Encoder.mo

encode(value: Types.Value) : Result.Result<[Nat8], Types.EncodingError>

Encodes a cbor value into a byte array

encodeToBuffer(buffer: Buffer.Buffer<Nat8>, value: Types.Value) : Result.Result<(), Types.EncodingError>

Encodes a cbor value into the supplied byte buffer

FloatX: Half(16), Single(32), Double(64)

Due to the lack of float functionality (float <-> bytes, half, single) and external reference was used for these. xtended-numbers in vessel or github.com/gekctek/motoko_numbers

Testing

mops test