Current section

Files

Jump to
forge_abi lib mix tasks gen_error_code.ex
Raw

lib/mix/tasks/gen_error_code.ex

defmodule Mix.Tasks.ForgeAbi.GenErrorCode do
@moduledoc """
Generate error code
"""
@output_folder Path.join(File.cwd!(), "priv")
@output_summary_file Path.join(@output_folder, "error.md")
@input_file Path.join(File.cwd!(), "lib/protobuf/status_code.yml")
def write_error_files do
parsed_file = parse_error_yml()
write_to_summary("# Status Code\n\n")
for {code_name, info} <- parsed_file do
prepare_for_code(code_name)
case is_binary(info) do
true -> handle_default_code(code_name, info)
false -> handle_tx_codes(info, code_name)
end
end
end
defp handle_default_code(code_name, info) do
write_to_summary("#{info}\n\n")
File.write(Path.join(@output_folder, "error_code/#{code_name}/default.md"), "#{info}")
end
defp handle_tx_codes(info, code_name) do
for {tx_name, tx_msg} <- info, do: handle_tx_code(code_name, tx_name, tx_msg)
end
defp handle_tx_code(code_name, tx_name, tx_msg) do
single_file = Path.join(@output_folder, "error_code/#{code_name}/#{tx_name}.md")
File.write(single_file, "#{tx_msg}")
write_to_summary("### #{tx_name}\n\n")
write_to_summary("#{tx_msg}\n\n")
end
defp prepare_for_code(code_name) do
write_to_summary("## #{code_name}\n\n")
File.mkdir_p(Path.join(@output_folder, "error_code/#{code_name}"))
end
defp parse_error_yml do
case YamlElixir.read_from_file(@input_file) do
{:ok, file} -> file
{:error, _} -> IO.puts("Fail to parse the status_code.yml file.")
end
end
defp write_to_summary(content) do
File.write(@output_summary_file, content, [:append])
end
def run(_argv) do
write_error_files()
end
end