Packages
mollie_api
0.1.0-20260521
0.1.0-20260722
0.1.0-20260721
0.1.0-20260717
0.1.0-20260716
0.1.0-20260708
0.1.0-20260702
0.1.0-20260629
0.1.0-20260625
0.1.0-20260622
0.1.0-20260619
0.1.0-20260617
0.1.0-20260615
0.1.0-20260611
0.1.0-20260609
0.1.0-20260601
0.1.0-20260529
0.1.0-20260527
0.1.0-20260526
0.1.0-20260525
0.1.0-20260521
0.1.0-20260519
0.1.0-20260515
0.1.0-20260513
0.1.0-20260512
0.1.0-20260507
0.1.0-20260505
0.1.0-20260504
0.1.0-20260430
0.1.0-20260429
0.1.0-20260428
0.1.0-20260427
0.1.0-20260423
0.1.0-20260421
0.1.0-20260420
0.1.0-20260415
0.1.0-20260410
0.1.0-20260409
0.1.0-20260408
0.1.0-20260402
0.1.0-20260401
0.1.0-20260331
0.1.0-20260330
0.1.0-20260327
0.1.0-20260317
0.1.0-20260313
0.1.0-20260310
0.1.0-20260309
0.1.0-20260306
0.1.0-20260305
0.1.0-20260303
0.1.0-20260302
0.1.0-20260226
0.1.0-20260218
0.1.0-20260217
0.1.0-20260210
0.1.0-20260206
0.1.0-20260205
0.1.0-20260204
0.1.0-20260203
0.1.0-20260202
0.1.0-20260130
0.1.0-20260129
0.1.0-20260114
0.1.0-20260109
0.1.0-20260107
0.1.0-20251222
0.1.0-20251125
0.1.0-20251121
0.1.0-20251119
0.1.0-20251118
0.1.0-20251113
An autogenerated Elixir client for the Mollie API, generated from the OpenAPI specification.
Current section
Files
Jump to
Current section
Files
lib/mollie_api/deserializer.ex
# NOTE: This file is auto generated by OpenAPI Generator 7.17.0 (https://openapi-generator.tech).
# Do not edit this file manually.
defmodule MollieAPI.Deserializer do
@moduledoc """
Helper functions for deserializing responses into models
"""
def json_decode(json) do
JSON.decode(json)
end
def json_decode(json, module) do
json
|> json_decode()
|> case do
{:ok, decoded} -> {:ok, to_struct(decoded, module)}
{:error, _} = error -> error
end
end
@doc """
Update the provided model with a deserialization of a nested value
"""
@spec deserialize(struct(), atom(), :date | :datetime | :list | :map | :struct, module()) ::
struct()
def deserialize(model, field, :list, module) do
model
|> Map.update!(field, fn
nil ->
nil
list ->
Enum.map(list, &to_struct(&1, module))
end)
end
def deserialize(model, field, :struct, module) do
model
|> Map.update!(field, fn
nil ->
nil
value ->
to_struct(value, module)
end)
end
def deserialize(model, field, :map, module) do
maybe_transform_map = fn
nil ->
nil
existing_value ->
Map.new(existing_value, fn
{key, value} ->
{key, to_struct(value, module)}
end)
end
Map.update!(model, field, maybe_transform_map)
end
def deserialize(model, field, :date, _) do
value = Map.get(model, field)
case is_binary(value) do
true ->
case Date.from_iso8601(value) do
{:ok, date} -> Map.put(model, field, date)
_ -> model
end
false ->
model
end
end
def deserialize(model, field, :datetime, _) do
value = Map.get(model, field)
case is_binary(value) do
true ->
case DateTime.from_iso8601(value) do
{:ok, datetime, _offset} -> Map.put(model, field, datetime)
_ -> model
end
false ->
model
end
end
defp to_struct(value, module)
defp to_struct(nil, _), do: nil
defp to_struct(list, module) when is_list(list) and is_atom(module) do
Enum.map(list, &to_struct(&1, module))
end
defp to_struct(map, module) when is_map(map) and is_atom(module) do
model = struct(module)
model
|> Map.keys()
|> List.delete(:__struct__)
|> Enum.reduce(model, fn field, acc ->
Map.replace(acc, field, Map.get(map, Atom.to_string(field)))
end)
|> module.decode()
end
defp to_struct(value, module) when is_atom(module) do
module.decode(value)
end
end