blob: 2f5008a2407b935d35791faa08fa3d905af93b3b [file] [log] [blame]
/*
* Copyright (c) 2024 Project CHIP Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <lib/shell/CommandSet.h>
namespace chip {
namespace Shell {
/**
* Templatized shell command handler that runs one of the provided subcommands.
*
* The array of subcommands is provided as a non-type template parameter.
*
* The first argument is used to select the subcommand to be executed and
* the remaining arguments are forwarded to the subcommand's handler.
* If no argument has been provided or the first argument is "help", then
* the function prints help text for each subcommand and returns no error.
*
* Usage example:
* @code
* constexpr Command subCommands[3] = {
* {handler_a, "cmd_a", "command a help text"},
* {handler_b, "cmd_b", "command b help text"},
* {handler_c, "cmd_c", "command c help text"},
* };
*
* // Execute the matching subcommand
* SubShellCommand<3, subCommands>(argc, argv);
* @endcode
*
* @param argc Number of arguments in argv.
* @param argv Array of arguments in the tokenized command line to execute.
*/
template <size_t N, const Command (&C)[N]>
inline CHIP_ERROR SubShellCommand(int argc, char ** argv)
{
static constexpr CommandSet commandSet(C);
return commandSet.ExecCommand(argc, argv);
}
} // namespace Shell
} // namespace chip