Packages

The Engine API is an HTTP API served by Docker Engine. It is the API the Docker client uses to communicate with the Engine, so everything the Docker client can do can be done with the API.

Current section

Files

Jump to
ex_docker_engine_api lib docker_engine_api deserializer.ex
Raw

lib/docker_engine_api/deserializer.ex

# NOTE: This file is auto generated by OpenAPI Generator 7.0.1 (https://openapi-generator.tech).
# Do not edit this file manually.
defmodule DockerEngineAPI.Deserializer do
@moduledoc """
Helper functions for deserializing responses into models
"""
@jason_decode_opts [keys: :strings]
def jason_decode(json) do
Jason.decode(json, @jason_decode_opts)
end
def jason_decode(json, module) do
json
|> jason_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(map_or_list, 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
end