Common Lisp implementation of the Erlang External Term Format
Common Lisp
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
optima
src
test
trivia
.gitignore
LICENSE
README.md
erlang-term-optima.asd
erlang-term-test.asd
erlang-term-trivia.asd
erlang-term.asd

README.md

cl-erlang-term

Version: 0.2.2

cl-erlang-term is a Common Lisp library for encoding and decoding objects in the Erlang External Term Format.

How to install

Use Quicklisp to install cl-erlang-term.

> (ql:quickload :erlang-term)

alternatively

> (ql:quickload :erlang-term-optima)

if you wish to include the optima extensions for pattern matching on Erlang objects.

Dependencies

Optional dependencies:

How to run the unit-tests

> (ql:quickload :erlang-term-test)
...
> (erlang-term-test:run-all-tests)

API

Encoding/decoding

[Function]
decode bytes &key start version-tag => erlang-term, position

Decodes the sequence bytes into an Erlang term, starting from position start. If version-tag has an integer value, bytes is expected to begin with a version tag byte of that value.

start defaults to 0. version-tag defaults to 131.

position is the location in bytes where the decoding ended.

[Function]
encode term &key version-tag compressed => bytes

Encodes term into a sequence of bytes. If version-tag has an integer value, bytes will start with a version tag byte of that value. If compressed is true, the encoded term will be zlib-compressed.

version-tag defaults to 131. compressed defaults to false.

Erlang object functions

Creating Erlang objects

[Function]
binary &rest bytes => binary

Creates a new Erlang binary with the contents of bytes.

[Function]
binary-to-string binary => string

Converts binary to a string.

[Function]
bytes-to-binary bytes => binary

Creates a new Erlang binary with the contents from the byte sequence bytes.

[Function]
make-atom string => atom

Creates a new Erlang atom (a symbol) with the name of string. The symbol is interned in the package designated by *atom-symbol-package*.

[Function]
make-pid node id serial creation => pid

Creates a new Erlang pid identified by the values of node, id, serial, and creation.

[Function]
make-port node id creation => port

Creates a new Erlang port identified by the values of node, id, and creation.

[Function]
make-reference node id creation => reference

Creates a new Erlang reference identified by the values of node, id, and creation.

[Function]
string-to-binary string => binary

Creates a new Erlang binary with the contents of string converted to bytes.

[Function]
tuple &rest erlang-translatable-objects => tuple

Creates a new Erlang tuple with erlang-translatable-objects as elements.

Erlang object accessors

[Reader]
bytes binary => byte-vector

Reader method for getting the contents of binary as byte vector.

[Reader]
bits-in-last-byte bit-binary => number-of-bits

Reader method for getting the number of bits in the last byte of bit-binary.

[Reader]
arity fun-or-tuple => arity

Reader method for getting the arity of either an Erlang fun or an Erlang tuple. The arity of a fun is the number of arguments it takes. The arity of a tuple is the number of elements in it.

[Reader]
size binary-or-tuple => size

Reader method for getting the size of either an Erlang binary or an Erlang tuple. The size of a binary is the number of bytes in it. The size of a tuple is the number of elements in it.

[Reader]
elements tuple => vector

Reader method for getting the elements of tuple as a vector.

[Function]
tuple-arity tuple => arity

Function for getting the number of elements in a tuple.

[Function]
tuple-ref tuple pos => element

Function for getting the element in tuple at position pos.

[Reader]
node identifier => node-name

Reader method for getting the node name from identifier, which is an Erlang pid, port, or reference.

[Reader]
module fun => module-name

Reader method for getting the module name from an Erlang fun.

Generic Erlang object functions

[Generic function]
match-p object-a object-b => boolean

Returns true if object-a and object-b match in the Erlang sense, i.e. they are structurally equivalent. Otherwise returns false.

Variables

[Constant variable]
+protocol-version+

The protocol version byte tag used in the Erlang External Term Format.

Value: 131

[Special variable]
*atom-symbol-package*

The package in which atom symbols are interned. Symbols are uninterned if NIL.

Default value: :keyword

[Special variable]
*erlang-false-is-lisp-nil*

Treat the Erlang atom false as the Lisp symbol NIL instead of '|false|.

Default value: false

[Special variable]
*erlang-string-is-lisp-string*

Treat Erlang strings as Lisp strings instead of lists of integers.

Default value: false

[Special variable]
*erlang-true-is-lisp-t*

Treat the Erlang atom true as the Lisp symbol T instead of '|true|.

Default value: false

[Special variable]
*lisp-nil-at-tail-is-erlang-empty-list*

Treat the Lisp symbol NIL at the tail of a list as the empty list instead of as the Erlang atom 'NIL'.

Default value: true

[Special variable]
*lisp-nil-is-erlang-empty-list*

Treat the Lisp symbol NIL as the empty list instead of as the Erlang atom 'NIL'.

Default value: true

[Special variable]
*lisp-nil-is-erlang-false*

Treat the Lisp symbol NIL as the Erlang atom false instead of 'NIL'.

Default value: false

[Special variable]
*lisp-string-is-erlang-binary*

Treat Lisp strings as Erlang binaries instead of as lists of integers.

Default value: false

[Special variable]
*lisp-t-is-erlang-true*

Treat the Lisp symbol T as the Erlang atom true instead of 'T'.

Default value: false

Types

Abstract types

[Type]
erlang-translatable

The base type for all types of objects that may be translated to Erlang terms.

Directly translatable types: integer, float, symbol, string, and list if all elements also are translatable.

Other types of Erlang terms are translated to subtypes of erlang-object.

[Class]
erlang-object

The base class for all Erlang term types that are not directly translatable to Lisp types.

[Class]
erlang-fun (erlang-object)

The base class for the different representations of Erlang funs.

[Class]
erlang-internal-fun (erlang-fun, erlang-object)

The base class for the two different representations of internal Erlang funs.

Concrete types

[Class]
erlang-binary (erlang-object)

Represents an Erlang binary or bit-binary.

[Class]
erlang-external-fun (erlang-fun, erlang-object)

Represents an external Erlang fun: fun M:F/A.

[Class]
erlang-new-internal-fun (erlang-internal-fun, erlang-fun, erlang-object)

Represents an internal Erlang fun: fun F/A and fun(Arg1,..) -> ... end.

[Class]
erlang-old-internal-fun (erlang-internal-fun, erlang-fun, erlang-object)

Represents an internal Erlang fun: fun F/A and fun(Arg1,..) -> ... end.

[Class]
erlang-pid (erlang-object)

Represents an Erlang pid.

[Class]
erlang-port (erlang-object)

Represents an Erlang port.

[Class]
erlang-reference (erlang-object)

Represents an Erlang reference.

[Class]
erlang-tuple (erlang-object)

Represents an Erlang tuple.