Mapail v1.0.2 Maptu.Extension
Contains custom functions extending Maptu
and superfluous to Maptu requirements. This module builds on top of maptu.ex
and with extracts and modifications of maptu.ex. Mapail would not
work without the additional functionality in this module.
Maptu Creators:
- [Andrea Leopardi](https://github.com/whatyouhide)
- [Aleksei Magusev](https://github.com/lexmag)
Maptu License:
- MIT
- https://github.com/lexhide/maptu/blob/master/LICENSE.txt
Modified by:
- Stephen Moloney
Summary
Functions
Behaves like Maptu.Extension.struct_rest/1 but returns the residual rest map rather
than the struct and raises in case of error
Behaves like Maptu.Extension.struct_rest/2 but returns the residual rest map rather than the struct
and raises in case of error
Converts a map to a struct, silently capturing residual key => value
pairs into a map with keys in the String.t format
Builds the mod struct with the given fields, silently capturing residual key => value
pairs into a map with keys in the String.t format
Types
non_strict_error_reason :: :missing_struct_key | :atom_key_not_expected | {:bad_module_name, binary} | {:non_existing_module, binary} | {:non_struct, module}
strict_error_reason :: non_strict_error_reason | {:non_existing_atom, binary} | {:non_existing_module, binary} | {:unknown_struct_field, module, atom}
Functions
Behaves like Maptu.Extension.struct_rest/1 but returns the residual rest map rather
than the struct and raises in case of error.
This function behaves like Maptu.Extension.struct_rest/1, but it returns the rest map (instead
of {:ok, struct, rest}) if the conversion is valid, and raises an ArgumentError
exception if it’s not valid.
Examples
iex> Maptu.Extension.rest!(%{"__struct__" => "Elixir.URI", "port" => 8080})
%{}
iex> Maptu.Extension.rest!(%{"__struct__" => "Elixir.URI", "port" => 8080, "foo" => 1})
%{"foo" => 1}
iex> Maptu.Extension.rest!(%{"__struct__" => "Elixir.GenServer"})
** (ArgumentError) module is not a struct: GenServer
Behaves like Maptu.Extension.struct_rest/2 but returns the residual rest map rather than the struct
and raises in case of error.
This function behaves like Maptu.Extension.struct_rest/2, but it returns the rest map (instead
of {:ok, struct, rest}) if the conversion is valid, and raises an ArgumentError
exception if it’s not valid.
Examples
iex> Maptu.Extension.rest!(URI, %{"port" => 8080, "nonexisting_field" => 1})
%{"nonexisting_field" => 1}
iex> Maptu.Extension.rest!(GenServer, %{})
** (ArgumentError) module is not a struct: GenServer
Converts a map to a struct, silently capturing residual key => value
pairs into a map with keys in the String.t format.
map is a map with binary keys that represents a “dumped” struct; it must
contain a "__struct__" key with a binary value that can be converted to a
valid module name. If the value of "__struct__" is not a module name or it’s
a module that isn’t a struct, then an error is returned.
Keys in map that are not fields of the resulting struct are are collected along with their
respective values into a separate map denoted by rest.
This function returns {:ok, struct, rest} if the conversion is successful,
{:error, reason} otherwise.
Examples
iex> Maptu.Extension.struct_rest(%{"__struct__" => "Elixir.URI", "port" => 8080, "foo" => 1})
{:ok, %URI{port: 8080}, %{"foo" => 1}}
iex> Maptu.Extension.struct_rest(%{"__struct__" => "Elixir.GenServer"})
{:error, {:non_struct, GenServer}}
struct_rest(module, map) ::
{:ok, struct, map} |
{:error, non_strict_error_reason}
Builds the mod struct with the given fields, silently capturing residual key => value
pairs into a map with keys in the String.t format.
This function takes a struct mod (mod should be a module that defines a
struct) and a map of fields with binary keys. It builds the mod struct by
safely parsing the fields in fields.
If a key in fields doesn’t map to a field in the resulting struct, the key and it’s
respective value are collected into a separate map denoted by rest.
This function returns {:ok, struct, rest} if the building is successful,
{:error, reason} otherwise.
Examples
iex> Maptu.Extension.struct_rest(URI, %{"port" => 8080, "nonexisting_field" => 1})
{:ok, %URI{port: 8080}, %{"nonexisting_field" => 1}}
iex> Maptu.Extension.struct_rest(GenServer, %{})
{:error, {:non_struct, GenServer}}