From ed4843b0ed2496c8ca725739fb7b08c9cbd97fe1 Mon Sep 17 00:00:00 2001 From: Badlop Date: Tue, 28 May 2024 18:36:01 +0200 Subject: [PATCH] Document 'any' argument and result type, useful for internal commands Also 'atom' may be used as argument type by some internal commands, for example the ones that refer to erlang node names. --- include/ejabberd_commands.hrl | 9 +++++++-- src/ejabberd_ctl.erl | 7 +++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/include/ejabberd_commands.hrl b/include/ejabberd_commands.hrl index d939f3c3d..a6a960d8c 100644 --- a/include/ejabberd_commands.hrl +++ b/include/ejabberd_commands.hrl @@ -19,13 +19,18 @@ %%%---------------------------------------------------------------------- -type aterm() :: {atom(), atype()}. --type atype() :: integer | string | binary | +-type atype() :: integer | string | binary | any | atom | {tuple, [aterm()]} | {list, aterm()}. -type rterm() :: {atom(), rtype()}. --type rtype() :: integer | string | atom | +-type rtype() :: integer | string | atom | any | {tuple, [rterm()]} | {list, rterm()} | rescode | restuple. +%% The 'any' and 'atom' argument types and 'any' result type +%% should only be used %% by commands with tag 'internal', +%% which are meant to be used only internally in ejabberd, +%% and not called using external frontends. + %% The purpose of a command can either be: %% - informative: its purpose is to obtain information %% - modifier: its purpose is to produce some change in the server diff --git a/src/ejabberd_ctl.erl b/src/ejabberd_ctl.erl index 80d942a6d..89adcdcd6 100644 --- a/src/ejabberd_ctl.erl +++ b/src/ejabberd_ctl.erl @@ -976,11 +976,14 @@ format_usage_ctype1({Name, Type, Description}, Indentation, ShCode) -> format_usage_ctype(Type, _Indentation) - when (Type==atom) or (Type==integer) or (Type==string) or (Type==binary) or (Type==rescode) or (Type==restuple)-> + when (Type==atom) or (Type==integer) or (Type==string) or (Type==binary) + or (Type==rescode) or (Type==restuple) -> io_lib:format("~p", [Type]); format_usage_ctype({Name, Type}, _Indentation) - when (Type==atom) or (Type==integer) or (Type==string) or (Type==binary) or (Type==rescode) or (Type==restuple)-> + when (Type==atom) or (Type==integer) or (Type==string) or (Type==binary) + or (Type==rescode) or (Type==restuple) + or (Type==any) -> io_lib:format("~p::~p", [Name, Type]); format_usage_ctype({Name, {list, ElementDef}}, Indentation) ->