cbor¶
The cbor library implements predicates for importing and exporting
data in the Concise Binary Object Representation (CBOR) format:
This library is a work-in-progress. Currently it requires a backend supporting unbounded integer arithmetic.
Representation¶
Maps are represented using curly-bracketed terms,
{Pairs}, where each pair uses the representationKey-Value.Arrays are represented using lists.
Byte strings uses
bytes(List)compound terms.Text strings can be represented as atoms,
chars(List), orcodes(List). The default when decoding is to use atoms when using thecborobject. To decode text strings into lists of chars or code, use thecbor/1with the parameter bound tocharsorcodes. For example:| ?- cbor::parse([0x65,0x68,0x65,0x6c,0x6c,0x6f], Term). Term = hello yes | ?- cbor(atom)::parse([0x65,0x68,0x65,0x6c,0x6c,0x6f], Term). Term = hello yes | ?- cbor(chars)::parse([0x65,0x68,0x65,0x6c,0x6c,0x6f], Term). Term = chars([h,e,l,l,o]) yes | ?- cbor(codes)::parse([0x65,0x68,0x65,0x6c,0x6c,0x6f], Term). Term = codes([104,101,108,108,111]) yes
Tagged data uses
tag(Tag, Data)compound terms.Simple values can be represented using
simple(Simple)compound terms.The CBOR elements
false,true,null, andundefinedare represented by, respectively, the@false,@true,@null, and@undefinedcompound terms.The compound terms
@infinity,@negative_infinity, and@not_a_numberare used to represent the corresponding CBOR elements.Only some backends distinguish between positive zero and negative zero. The compound terms
@zeroand@negative_zerocan be used as an alternative for encoding. The decoder, however, produces the0.0and-0.0floats.
Encoding¶
Encoding is accomplished using the generate/2 predicate. For
example:
| ?- cbor::generate([a,{b-c}], Encoding).
Encoding = [0x9f,0x61,0x61,0xbf,0x61,0x62,0x61,0x63,0xff,0xff]
yes
The encoding of arrays and maps uses indefinite-length encoding. All floats are currently encoded using decimal fractions. Encoding indicators and big floats are not currently supported.
Decoding¶
Decoding is accomplished using the parse/2 predicate. For example:
| ?- cbor::parse([0x9f,0x61,0x61,0xbf,0x61,0x62,0x61,0x63,0xff,0xff], Term).
Term = [a,{b-c}]
yes
API documentation¶
Open the ../../docs/library_index.html#cbor link in a web browser.
Loading¶
To load all entities in this library, load the loader.lgt file:
| ?- logtalk_load(cbor(loader)).
Testing¶
To test this library predicates, load the tester.lgt file:
| ?- logtalk_load(cbor(tester)).