You are looking at historical revision 39755 of this page. It may differ significantly from its current revision.
msgpack
An implementation of MessagePack for CHICKEN scheme v5.
Forked from msgpack-scheme and partially rewritten (ported to CHICKEN 5 and cleaned up). I kept the original license and most of the original API. However the byte-blob have been replaced with Chicken 5 native blob. I removed the dependency on bind egg and the need for C++ code using built-ins features of C5.
Authors
Hugo Arregui: Original author of the egg. Théo Cavignac: ported the egg to Chicken 5
Repository
Find the code at github.com.
Requirements
This package requires the following eggs: - matchable - srfi-1 - srfi-69
Installation
Through Chicken egg repository: Run chicken-install -s msgpack anywhere.
From source: First install the required eggs listed above. Then clone this repository. Finally run chicken-install -s in the root of this repository.
API Specification
Primitive pack-family procedures:
(pack-uint port value) ; will produce an error if the input is negative (pack-sint port value) (pack-float port FLONUM) ; pack 32b floats, support both exact and inexact but convert to flonum (inexact) anyway (pack-double port FLONUM) ; pack 64b floats, same limitations as above (pack-bin port BLOB) ; chicken.blob byte blob (pack-str port STRING) ; string (pack-array port VECTOR) ; scheme vector, also support lists (pack-map port HASH-TABLE) ; srfi-69 hash-table (pack-ext port EXT) ; extension (see below)
Also the simplest way to use is to use the generic procedures:
(pack port value) (pack/blob value)
These procedures will call primitive type packers, with the following rules: - if the value has a packer, apply it. - if the value is a string, it will be packed as str. - if the value is a blob, it will be packed as bin. - if the value is a char, it will be packed as a uint. - if the value is a list, it will be packed as an array. - if the value is a extension (see below), it will be packed as an ext
The /blob version return a blob of packed data, the others directly write it to the port.
Unpack procedures:
[lang:scheme] (unpack port [mapper]) (unpack/blob blob [mapper])
The optional mapper argument is applied to the output before returning. The /blob version unpack the content of blob instead of reading from a port.
Extension
Extension is a record defined as:
(define-record extension type data)
- type: integer from 0 to 127
- data: a blob
Example:
(make-extension 10 (string->byte-blob "hi"))
License
Distributed under the New BSD License.
History
v1.0.3 Ironing details for publication.
v1.0.0 Port to Chicken 5. Breaking changes: All blob related APIs have been changed to support Chicken native blob type.
v0.4 Last Chicken 4 version (2016)