Decoder implementation for the PHP serialisation format.
Summary
Functions
Deserialises a PHP serialised string into an Elixir term.
Types
@type opts() :: Dumbo.DecodeOpts.t()
Functions
Deserialises a PHP serialised string into an Elixir term.
Accepts an optional %Dumbo.DecodeOpts{} struct. See Dumbo.DecodeOpts.
Examples
iex> Dumbo.Decoder.decode("N;")
nil
iex> Dumbo.Decoder.decode("b:0;")
false
iex> Dumbo.Decoder.decode("b:1;")
true
iex> Dumbo.Decoder.decode("i:685230;")
685230
iex> Dumbo.Decoder.decode("i:-685230;")
-685230
iex> Dumbo.Decoder.decode("d:685230.15;")
685230.15
iex> Dumbo.Decoder.decode("d:INF;")
:infinity
iex> Dumbo.Decoder.decode("d:-INF;")
:negative_infinity
iex> Dumbo.Decoder.decode("d:NAN;")
:nan
iex> Dumbo.Decoder.decode(~s's:6:"foobar";')
"foobar"
iex> Dumbo.Decoder.decode(~s'a:2:{i:42;b:1;s:6:"A to Z";a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}}')
%{42 => true, "A to Z" => %{0 => 1, 1 => 2, 2 => 3}}
iex> Dumbo.Decoder.decode("a:0:{}")
%{}
iex> Dumbo.Decoder.decode(~s'O:8:"stdClass":2:{s:4:"John";d:3.14;s:4:"Jane";d:2.718;}')
%{"John" => 3.14, "Jane" => 2.718}Common PHP classes are resolved into native Elixir types automatically. Supply
an empty :object_resolvers map to receive raw objects instead:
iex> opts = %Dumbo.DecodeOpts{object_resolvers: %{}}
iex> Dumbo.Decoder.decode(~s'O:8:"stdClass":1:{s:3:"foo";s:3:"bar";}', opts)
{:object, "stdClass", %{"foo" => "bar"}}Objects can also be decoded with the :object_resolvers option:
iex> opts = %Dumbo.DecodeOpts{object_resolvers: %{"stdClass" => fn obj -> obj end}}
iex> Dumbo.Decoder.decode(~s'O:8:"stdClass":1:{s:3:"foo";s:3:"bar";}', opts)
%{"foo" => "bar"}