Erlang external term format parser/serializer for Rust.
Decoding
```rust extern crate erlext; use erlext::Decoder;
fn main() { let mut decoder = Decoder::new(&mut io::stdin()); assert!(true == decoder.readprelude().unwrap()); println!("{}", decoder.decodeterm().unwrap()); } ```
Encoding
```rust extern crate erlext; use erlext::{Eterm, Encoder};
fn main() { let term = Eterm::List(vec!(Eterm::SmallInteger(1), Eterm::Integer(1000000), Eterm::Nil)); // this combination of options make it compatible with erlang:termtobinary/1 let utf8atoms = false; let smallatoms = false; let fairnewfun = true; let mut encoder = Encoder::new(&mut io::stdout(), utf8atoms, smallatoms, fairnewfun); encoder.writeprelude(); encoder.encodeterm(term); } ```
More examples are in examples
directory.
Types (all Erlang 17.1 types are supported):
0..255
integer()
float()
atom()
reference()
erlang:make_ref/0
port()
eg, socket or raw file or erlang:open_port/2
pid()
Vec<Eterm>
) : { any() }
Vec<(Eterm, Eterm)>
) : #{any() := any()}
[]
Vec<u8>
) : [0..255]
Vec<Eterm>
) : [ any() ]
Vec<u8>
) : binary()
BigInt
) : integer() > i32
fun(..) -> ... end.
- deprecated variantfun(..) -> ... end.
fun my_mod:my_fun/1
<<128, 128:4>>
serialize::Decoder
and serialize::Encoder
implementations (not so easy for containers)