BERT
Binary ERlang Term serialization library for Javascript. (An updated version of this repo )
Usage
Example Usage
When needing to consume data in Javascript from an Erlang system, the Erlang system can simply send encoded binary data:
Elixir/Erlang:
# This is Elixir code, but function calls will be very similar in Erlang personData = %{ name: "Bob", age: 32, eye_color: "Brown", personality_traits: [ "Funny", "Inquisitive" ]} # Convert to binary:erlang.term_to_binary(personData) # .... Code that sends binary data to javascript
Javascript:
// ... Code that receives binary data from erlang/elixir and stores it// to a variable, personData const Bert = const decodedPerson = Bert/* => { age: 32, eye_color: 'Brown', name: 'Bob', personality_traits: [ 'Funny', 'Inquisitive' ] }*/
Modifying this data and sending it back to Erlang/Elixir would be as simple as:
Javascript:
// ... Assuming we have a decodedPerson object decodedPersonage = 38decodedPersonname = 'Robert' const reEncodedPerson = Bert // ... Send the binary
Elixir/Erlang:
# ... After having received binary data and setting it to variable modifiedPersonData: decodedPerson = :erlang.binary_to_term(modifiedPersonData) # => %{ age: 38, eye_color: "Brown", name: "Robert", personality_traits: ["Funny", "Inquisitive"] }
Encoding
Maps (Elixir)
Javascript objects map directly to Maps in Erlang
const Bert = // To encode a javascript object to an elixir map:const mapToEncode = a: 1 b: "hello!" c: 1 2 3 const encodedMap = Bert // BinaryToList shows individual bytes as a javascript arrayconsole// => [ 131, 116, 0, 0, 0, 3, 100, 0, 1, 97, 97, 1, 100, 0, 1, 98, 109, 0, 0, 0, 6, 104, 101, 108, 108, 111, 33, 100, 0, 1, 99, 108, 0, 0, 0, 3, 97, 1, 97, 2, 97, 3, 106 ]
Lists
Javascript arrays map to Erlang Lists
const Bert = const arrayToEncode = 'hello' 'world' 32 key: "value" const encodedArray = Bert console
Todo:
- Write docs for rest of data types
- Return
nil
asnull
instead of'nil'
- Add support for NEW_FLOAT_EXT
Decoding
Decoding is typically much simpler than encoding. Just pass the given Binary Erlang Term:
const Bert = // We're showing the term as an array of bytes here for clarity.// You'll more likely have a stringconst erlangTerm = 131 116 0 0 0 3 100 0 1 97 97 1 100 0 1 98 97 2 100 0 1 99 116 0 0 0 1 100 0 4 119 111 97 104 109 0 0 0 8 97 32 115 116 114 105 110 103 // Convert the array to a string const decoded = Bert console// => { a: 1, b: 2, c: { woah: 'a string' } }