Packages

Yet another bitcoin elixir RPC library. Completely generated against bitcoin cli.

Current section

Files

Jump to
ex_bitcoin lib mix tasks generate_rpc.ex
Raw

lib/mix/tasks/generate_rpc.ex

defmodule Mix.Tasks.ExBitcoin.GenerateRpc do
@moduledoc """
This CLI utilize the functionality of bitcoin-cli. If you want to generate your own elixir RPC with this CLI, please install bitcoin firstly.
"""
use Mix.Task
require Logger
alias ExBitcoinTask.GenerateRpc.{ListCmd, SingleCmd}
@list_cmd "bitcoin-cli help"
def run(_) do
IO.puts("Scraping #{@list_cmd}")
@list_cmd
|> run_bitcoin_cli
|> ListCmd.format_response()
|> Enum.map(fn {k, data} ->
items =
data
|> Map.get("items", [])
|> process_commands
content = Map.put(data, "items", items)
write_file("#{String.downcase(k)}.json", content)
end)
end
defp run_bitcoin_cli(cmd) do
cmd
|> to_charlist
|> :os.cmd()
|> to_string
end
defp process_commands(commands) do
Enum.map(commands, fn cmd_name ->
cli = @list_cmd <> " #{cmd_name}"
IO.puts("Scraping #{cli}")
cli
|> run_bitcoin_cli
|> SingleCmd.format_response()
end)
end
defp write_file(filename, content) do
path =
:ex_bitcoin
|> Application.app_dir()
|> Path.join("priv/rpc/#{filename}")
case Poison.encode_to_iodata(content, pretty: true) do
{:ok, data} ->
File.write!(path, data)
err ->
IO.puts("#{inspect(content)}")
throw(err)
end
end
end