Decodes Ruby's Marshal.dump gibberish into orthodox Erlang
Erlang Makefile
Latest commit d877b1b Mar 13, 2016 @kyrylo Merge pull request #2 from kyrylo/symbols-fix
rmarshal: rework the library

README.md

RMarshal

Build Status semver

Introduction

This Erlang library deserialises Ruby objects dumped by Marshal.dump into Erlang terms. It's like Ruby's Marshal.load, but for Erlang. Currently, it doesn't support loading advanced objects like classes, but the bare minimum is supported. The list of supported objects includes:

  • Fixnum
  • Hash
  • Array
  • Bignum
  • Symbol
  • Float
  • String

Installation

Rebar3

%% rebar.config
{deps, [
  {rmarshal, {git, "git://github.com/kyrylo/rmarshal.git", {tag, "v0.0.4"}}}
]}.

Examples

Basic example

Dump some Ruby objects into a binary file:

# data.rb
data = Marshal.dump(hello: 'world')
File.open('data.dat', 'w') do |f|
  f.write(data)
end

Read the dumped data with Erlang and load it with help of the RMarshal library:

%% loader.erl
load_ruby_data() ->
    case file:read_file("data.dat") of
        {ok, BinaryData} -> rmarshal:load(BinaryData);
        Any -> Any
    end.

load_ruby_data()
%% Returns:
%% {ok, #{hello => "world"}}

API

rmarshal:load/1

Accepts binary string formatted according to the official Marshal Format. Returns a tuple with in the format {ok, rterm()}.

{ok, Decoded} = rmarshal:load(BinaryData).

Testing

Run the following command:

make test

Supported Erlang versions

  • ≥17.0

Contact

In case you have a problem, question or a bug report, feel free to:

Licence

The project uses the zlib License. See the LICENCE.txt file for more information.