defmodule Mix.Tasks.HostKit.Render do @moduledoc "Renders a HostKit resource by kind and name." use Mix.Task @shortdoc "Render one HostKit resource" @impl true def run(args) do Mix.Task.run("app.start") {opts, positional} = OptionParser.parse!(args, strict: [require: :keep]) case positional do [path, kind, name] -> render(path, kind, name, opts) _args -> Mix.raise("usage: mix host_kit.render [--require FILE] PATH KIND NAME") end end defp render(path, kind, name, opts) do project = HostKit.load!(path, require: Keyword.get_values(opts, :require)) id = {String.to_existing_atom(kind), name} case HostKit.Render.render(project, id) do {:ok, iodata} -> IO.write(iodata) {:error, reason} -> Mix.raise("could not render #{inspect(id)}: #{inspect(reason)}") end end end