defmodule Mix.Tasks.ZoiForge.Clean do
@moduledoc """
Removes generated schema modules from the output directory.
mix zoi_forge.clean
mix zoi_forge.clean --output lib/schemas
"""
use Mix.Task
@shortdoc "Removes generated schema modules"
@switches [
output: :string
]
@impl Mix.Task
def run(args) do
Mix.Task.run("app.config")
{opts, _argv, _invalid} = OptionParser.parse(args, strict: @switches)
output_dir =
opts
|> Map.new()
|> Map.take([:output])
|> Map.new(fn {_, value} -> {:output_dir, value} end)
|> Mix.ZoiForge.Config.build()
|> Keyword.fetch!(:output_dir)
output_dir = Path.expand(output_dir)
if File.exists?(output_dir) do
case File.rm_rf(output_dir) do
{:ok, _} ->
Mix.shell().info("Removed generated schemas from #{output_dir}")
{:error, reason, path} ->
Mix.raise("failed to remove #{path}: #{inspect(reason)}")
end
else
Mix.shell().info("No generated schemas at #{output_dir}")
end
end
end