Current section
Files
Jump to
Current section
Files
lib/openapi/tasks/define.ex
defmodule Pier.OpenApi.Tasks.Definitions do
@moduledoc false
alias Pier.OpenApi.Tasks
use Pier.CustomLogger, name: __MODULE__
defstruct [:name, :description, :required_params, :properties, :module_name, parameters: []]
def build(%{contents: contents} = blueprint, _opts) do
definitions = Enum.map(contents["definitions"],&retrieve_metadata(&1))
{:ok, %{blueprint | definitions: definitions}}
end
def retrieve_metadata({name, %{"type" => "object"} = definition_spec}) do
Logger.metadata(module_name: __MODULE__)
parameters = get_parameters(definition_spec["properties"])
%Tasks.Definitions{
name: name,
module_name: Module.concat(["Docker", "Types", Macro.camelize(name)]),
description: definition_spec["description"] || false,
required_params: definition_spec["required"],
parameters: parameters,
properties: nil
}
end
def retrieve_metadata({name, definition_spec}) do
%Tasks.Definitions{
name: name,
module_name: Module.concat(["Docker", "Types", Macro.camelize(name)]),
description: definition_spec["description"] || false,
required_params: definition_spec["required"],
properties: nil
}
end
@spec get_parameters(any) :: []
defp get_parameters(nil), do: []
defp get_parameters(properties) do
Enum.map(properties, fn {k, _} ->
String.to_atom(k)
end)
end
end