diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2014-09-16 14:32:37 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2014-09-16 14:32:37 +0100 |
commit | ce22011db90ceaa817c70108b85334fa034a7dfc (patch) | |
tree | 5438df3055ccef340ac95c2bfa76997fd2e30790 /src/rabbit_misc.erl | |
parent | d790b58cb380d2b1b6825e6bf1f3dd004da3a07b (diff) | |
download | rabbitmq-server-ce22011db90ceaa817c70108b85334fa034a7dfc.tar.gz |
Extract commonality between rabbit_control_main and rabbit_plugins_main.
Diffstat (limited to 'src/rabbit_misc.erl')
-rw-r--r-- | src/rabbit_misc.erl | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index c5b566de..3696698c 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -49,7 +49,6 @@ -export([version_minor_equivalent/2]). -export([dict_cons/3, orddict_cons/3, gb_trees_cons/3]). -export([gb_trees_fold/3, gb_trees_foreach/2]). --export([parse_arguments/3]). -export([all_module_attributes/1, build_acyclic_graph/3]). -export([now_ms/0]). -export([const/1]). @@ -86,7 +85,6 @@ -type(ok_or_error() :: rabbit_types:ok_or_error(any())). -type(thunk(T) :: fun(() -> T)). -type(resource_name() :: binary()). --type(optdef() :: flag | {option, string()}). -type(channel_or_connection_exit() :: rabbit_types:channel_exit() | rabbit_types:connection_exit()). -type(digraph_label() :: term()). @@ -207,12 +205,6 @@ -spec(gb_trees_fold/3 :: (fun ((any(), any(), A) -> A), A, gb_tree()) -> A). -spec(gb_trees_foreach/2 :: (fun ((any(), any()) -> any()), gb_tree()) -> 'ok'). --spec(parse_arguments/3 :: - ([{atom(), [{string(), optdef()}]} | atom()], - [{string(), optdef()}], - [string()]) - -> {'ok', {atom(), [{string(), string()}], [string()]}} | - 'no_command'). -spec(all_module_attributes/1 :: (atom()) -> [{atom(), atom(), [term()]}]). -spec(build_acyclic_graph/3 :: @@ -786,64 +778,6 @@ gb_trees_fold1(Fun, Acc, {Key, Val, It}) -> gb_trees_foreach(Fun, Tree) -> gb_trees_fold(fun (Key, Val, Acc) -> Fun(Key, Val), Acc end, ok, Tree). -%% Takes: -%% * A list of [{atom(), [{string(), optdef()]} | atom()], where the atom()s -%% are the accepted commands and the optional [string()] is the list of -%% accepted options for that command -%% * A list [{string(), optdef()}] of options valid for all commands -%% * The list of arguments given by the user -%% -%% Returns either {ok, {atom(), [{string(), string()}], [string()]} which are -%% respectively the command, the key-value pairs of the options and the leftover -%% arguments; or no_command if no command could be parsed. -parse_arguments(Commands, GlobalDefs, As) -> - lists:foldl(maybe_process_opts(GlobalDefs, As), no_command, Commands). - -maybe_process_opts(GDefs, As) -> - fun({C, Os}, no_command) -> - process_opts(atom_to_list(C), dict:from_list(GDefs ++ Os), As); - (C, no_command) -> - (maybe_process_opts(GDefs, As))({C, []}, no_command); - (_, {ok, Res}) -> - {ok, Res} - end. - -process_opts(C, Defs, As0) -> - KVs0 = dict:map(fun (_, flag) -> false; - (_, {option, V}) -> V - end, Defs), - process_opts(Defs, C, As0, not_found, KVs0, []). - -%% Consume flags/options until you find the correct command. If there are no -%% arguments or the first argument is not the command we're expecting, fail. -%% Arguments to this are: definitions, cmd we're looking for, args we -%% haven't parsed, whether we have found the cmd, options we've found, -%% plain args we've found. -process_opts(_Defs, C, [], found, KVs, Outs) -> - {ok, {list_to_atom(C), dict:to_list(KVs), lists:reverse(Outs)}}; -process_opts(_Defs, _C, [], not_found, _, _) -> - no_command; -process_opts(Defs, C, [A | As], Found, KVs, Outs) -> - OptType = case dict:find(A, Defs) of - error -> none; - {ok, flag} -> flag; - {ok, {option, _}} -> option - end, - case {OptType, C, Found} of - {flag, _, _} -> process_opts( - Defs, C, As, Found, dict:store(A, true, KVs), - Outs); - {option, _, _} -> case As of - [] -> no_command; - [V | As1] -> process_opts( - Defs, C, As1, Found, - dict:store(A, V, KVs), Outs) - end; - {none, A, _} -> process_opts(Defs, C, As, found, KVs, Outs); - {none, _, found} -> process_opts(Defs, C, As, found, KVs, [A | Outs]); - {none, _, _} -> no_command - end. - now_ms() -> timer:now_diff(now(), {0,0,0}) div 1000. |