Current section

Files

Jump to
ex_open_api_utils lib mix tasks ex_open_api_utils.spec.yaml.ex
Raw

lib/mix/tasks/ex_open_api_utils.spec.yaml.ex

defmodule Mix.Tasks.ExOpenApiUtils.Spec.Yaml do
use Mix.Task
require Mix.Generator
@default_filename "openapi.yaml"
@dialyzer {:nowarn_function, encoder: 0}
@impl Mix.Task
def run(argv) do
{opts, _, _} = OptionParser.parse(argv, strict: [start_app: :boolean])
Keyword.get(opts, :start_app, true) |> maybe_start_app()
OpenApiSpex.ExportSpec.call(argv, &encode/2, @default_filename)
end
defp maybe_start_app(true), do: Mix.Task.run("app.start")
defp maybe_start_app(_), do: Mix.Task.run("app.config", preload_modules: true)
defp encode(spec, opts) do
spec
|> encoder().encode(opts)
|> case do
{:ok, yaml} ->
yaml
{:error, error} ->
Mix.raise("could not encode #{inspect(spec)}, error: #{inspect(error)}.")
end
end
defp encoder do
OpenApiSpex.OpenApi.yaml_encoder() ||
Mix.raise(
"could not load YAML encoder, please add one of supported encoders to dependencies."
)
end
end