Data Types in Pyrlang¶
Decoding¶
Erlang | Python | Notes |
atom() | Pyrlang.Atom | Can use str() or access text_ directly |
float() | float | 64-bit double precision floating point |
integer() | int | Any size integers |
list() | list | |
improper_list() | (list, _Tail) | A tuple with list and the tail element |
unicode string() | list(int) | Use helper functions in list to convert to string |
byte string() | bytes | |
tuple() | tuple | |
map() | dict | |
binary() | bytes | |
bitstring() | (bytes, int) | A tuple of bytes and last_byte_bits:int defining incomplete last byte |
pid() | Pyrlang.Pid | |
reference() | Pyrlang.Reference | |
fun() | Pyrlang.Fun | Not useful in Python |
Encoding¶
Python | Erlang | Notes |
Pyrlang.Atom | atom() | |
float | float() | |
int | integer() | |
list | list() | |
Pyrlang.ImproperList | improper_list() | |
list(int) | string() | |
bytes | binary() | |
tuple | tuple() | |
dict | map() | |
Pyrlang.Bitstring | bitstring() | A binary with last byte incomplete |
Pyrlang.Pid | pid() | |
Pyrlang.Reference | reference() | |
Pyrlang.Fun | fun() | Not useful in Python |
other objects | #{'ClassName', #{}} | Encoding may fail on some types |
Lists¶
Erlang lists can be of 2 kinds:
- Regular lists of anything:
- Unicode strings, which are regular lists of integers in unicode range.
- 8-bit strings, sometimes called latin-1 or ASCII, which are regular lists of bytes.
- Improper lists (those with last cell's tail being not
[] NIL
).
Pyrlang always decodes incoming regular lists as Python lists,
use helper functions in list
to extract strings.
If incoming string contained only bytes (integers between 0 and 255) then
Erlang node will optimize the encoding and send a byte array. In this case you
will receive Python bytes
string, and not a list, which is
the same as if you have sent a binary, so to reduce confusion always send
strings as UTF8 binaries.
A regular Erlang list always has an invisible []
(NIL
) set as tail of
its last cons cell. Regular lists map directly to Python lists and
there is no easy way to tell a list of integers from a string other than
check elements ranges and assume that is a printable string. Unless you received
Python bytes
then it's easy.
An improper Erlang list has some other value than [] NIL
as the tail of
its last cell.
Pyrlang returns these as Python tuple (list, tail)
.
To tell Pyrlang encoder to send an improper list back to Erlang, use the
ImproperList
class.
Binaries¶
Pyrlang always decodes incoming Erlang binaries into Python bytes
objects.
Bitstrings are decoded as Python pairs of (bytes, last_byte_bits:int)
To be able to send a bitstring back to Erlang, use class
BitString
.