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
@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"}
@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";}'
@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;"