defmodule Web3AptosEx.Aptos.CliParser do
import NimbleParsec
@moduledoc """
aptos CLI commands:
$ aptos move init
"""
aptos_signal =
string("aptos")
aptos_move_signal =
string("aptos move")
space = ascii_string([?\s], min: 0) |> ignore()
name_param_signal =
string("--name")
|> ignore(space)
|> concat(ascii_string([?_, ?0..?9, ?a..?z, ?A..?Z], min: 0))
defparsec :cmd,
choice([
aptos_move_signal,
aptos_signal
])
|> ignore(space)
|> optional() # behaviours
|> optional(name_param_signal), debug: true # params
def parse_cmd(cmd_str) do
with {:ok, result, _, _, _, _} <- cmd(cmd_str) do
{[first_arg], others} = Enum.split(result, 1)
do_parse_cmd(first_arg, others)
end
end
def do_parse_cmd("aptos", params), do: handle_aptos(params)
def do_parse_cmd("aptos move", params), do: handle_aptos_move(params)
def handle_aptos(params) do
:aptos
end
def handle_aptos_move(params) do
:aptos_move
end
end