Dumbo (Dumbo v0.2.0)

Copy Markdown View Source

An encoder and decoder for the PHP serialisation format.

Dumbo allows you to serialise Elixir data structures into PHP's serialisation format and deserialise PHP serialised strings back into Elixir terms.

Summary

Functions

Deserialises a PHP serialised string into an Elixir term.

Serializes an Elixir term into a PHP serialised binary string.

Serializes an Elixir term into iodata representing the PHP serialised format.

Functions

decode(source, opts \\ %Dumbo.DecodeOpts{})

@spec decode(source :: binary(), opts :: Dumbo.DecodeOpts.t()) :: term()

Deserialises a PHP serialised string into an Elixir term.

Accepts an optional %Dumbo.DecodeOpts{} struct. See Dumbo.DecodeOpts.

Common PHP classes are resolved into native Elixir types automatically; see Dumbo.PHP.

Examples

iex> Dumbo.decode("i:42;")
42

iex> Dumbo.decode(~s's:5:"hello";')
"hello"

iex> Dumbo.decode("b:1;")
true

iex> Dumbo.decode("b:0;")
false

iex> Dumbo.decode("N;")
nil

iex> Dumbo.decode(~s'a:2:{i:0;s:3:"foo";i:1;s:3:"bar";}')
%{0 => "foo", 1 => "bar"}

iex> Dumbo.decode(~s'O:8:"stdClass":1:{s:3:"foo";s:3:"bar";}')
%{"foo" => "bar"}

iex> opts = %Dumbo.DecodeOpts{object_resolvers: %{}}
iex> Dumbo.decode(~s'O:8:"stdClass":1:{s:3:"foo";s:3:"bar";}', opts)
{:object, "stdClass", %{"foo" => "bar"}}

iex> opts = %Dumbo.DecodeOpts{object_resolvers: %{"stdClass" => fn obj -> obj end}}
iex> Dumbo.decode(~s'O:8:"stdClass":1:{s:3:"foo";s:3:"bar";}', opts)
%{"foo" => "bar"}

encode(term, opts \\ %Dumbo.EncodeOpts{})

@spec encode(term :: term(), opts :: Dumbo.EncodeOpts.t()) :: binary()

Serializes an Elixir term into a PHP serialised binary string.

Accepts an optional %Dumbo.EncodeOpts{} struct to configure encoding behavior.

Examples

iex> Dumbo.encode(42)
"i:42;"

iex> Dumbo.encode("hello")
~s's:5:"hello";'

iex> Dumbo.encode(true)
"b:1;"

iex> Dumbo.encode(false)
"b:0;"

iex> Dumbo.encode(nil)
"N;"

iex> Dumbo.encode([1, 2, 3])
"a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}"

iex> Dumbo.encode(%{"foo" => "bar"})
~s'a:1:{s:3:"foo";s:3:"bar";}'

encode_to_iodata(term, opts \\ %Dumbo.EncodeOpts{})

@spec encode_to_iodata(term :: term(), opts :: Dumbo.EncodeOpts.t()) :: iodata()

Serializes an Elixir term into iodata representing the PHP serialised format.

Accepts an optional %Dumbo.EncodeOpts{} struct to configure encoding behavior.

Examples

iex> Dumbo.encode_to_iodata(42)
["i:", "42", ?;]

iex> Dumbo.encode_to_iodata("hello")
["s:", "5", ~s':"', "hello", ~s'";']

iex> Dumbo.encode_to_iodata(42) |> IO.iodata_to_binary()
"i:42;"