defmodule Mix.Tasks.Rustq.Gen do
@moduledoc """
Generates files declared in `rustq.exs`.
mix rustq.gen
mix rustq.gen --check
mix rustq.gen term_helpers
mix rustq.gen --config path/to/rustq.exs
Use `--check` in CI to verify that generated files are up to date without
writing them. Passing one or more target names generates only those targets.
"""
use Mix.Task
@shortdoc "Generates files declared in rustq.exs"
@impl Mix.Task
def run(args) do
{opts, names, invalid} =
OptionParser.parse(args, strict: [check: :boolean, config: :string])
if invalid != [] do
Mix.raise("invalid rustq.gen options: #{inspect(invalid)}")
end
config = Keyword.get(opts, :config, "rustq.exs")
config
|> RustQ.Generated.load_manifest!()
|> RustQ.Generated.sync_all!(
check: Keyword.get(opts, :check, false),
only: names,
shell: Mix.shell()
)
rescue
error in RustQ.Generated.StaleError -> Mix.raise(Exception.message(error))
end
end