6 #ifndef IROHA_CLI_INTERACTIVE_COMMON_CLI_HPP 7 #define IROHA_CLI_INTERACTIVE_COMMON_CLI_HPP 14 #include <unordered_map> 17 #include <boost/optional.hpp> 24 namespace interactive {
62 using ParamsMap = std::unordered_map<std::string, ParamsDescription>;
91 const std::vector<std::string> ¶ms);
142 boost::optional<std::string>
promptString(
const std::string &message);
162 boost::optional<std::vector<std::string>>
parseParams(
163 std::string line, std::string command_name,
ParamsMap ¶ms_map);
171 size_t addMenuPoint(std::vector<std::string> &menu_points,
172 const std::string &description,
173 const std::string &command_short_name);
183 template <
typename K,
typename V>
185 return parsers_map.size() == 0 ? 1 : parsers_map.size();
197 template <
typename K,
typename V>
199 K command_name, std::unordered_map<K, V> ¶ms_map) {
200 auto it = params_map.find(command_name);
201 if (it == params_map.end()) {
215 std::vector<std::string> params,
216 const std::string &default_ip,
233 template <
typename T,
typename V,
typename C>
237 std::unordered_map<std::string, V> &parsers_map,
240 if (not raw_command) {
244 auto command_name = raw_command.value();
247 std::cout <<
"Parser for command not found" << std::endl;
250 auto params =
parseParams(line, command_name, params_map);
252 std::cout <<
"Parse params returned no value" << std::endl;
255 return (class_pointer->*parser.value())(params.value());
267 template <
typename V>
269 std::unordered_map<std::string, V> &parsers_map,
270 const std::string &command_name,
271 const std::string &command_description,
274 auto index = std::to_string(
275 addMenuPoint(menu_points, command_description, command_name));
277 parsers_map[index] = parser;
278 parsers_map[command_name] = parser;
290 template <
typename V>
296 std::for_each(descriptionMap.begin(),
297 descriptionMap.end(),
298 [&parsers_map, &menu_points, ¶msMap](
auto val) {
299 auto command_name = val.first;
300 auto command_description = val.second;
303 menu_points, command_description, command_name));
304 parsers_map[index] = parsers_map.at(command_name);
306 paramsMap[index] = paramsMap.at(command_name);
314 #endif // IROHA_CLI_INTERACTIVE_COMMON_CLI_HPP boost::optional< std::string > promptString(const std::string &message)
Definition: interactive_common_cli.cpp:80
Definition: client.cpp:16
DescriptionMap getCommonDescriptionMap()
Definition: interactive_common_cli.cpp:15
MenuContext
Definition: interactive_common_cli.hpp:29
const std::string SAVE_CODE
Definition: interactive_common_cli.hpp:65
std::vector< ParamData > ParamsDescription
Definition: interactive_common_cli.hpp:56
const std::string BACK_CODE
Definition: interactive_common_cli.hpp:67
void handleUnknownCommand(std::string &command)
Definition: interactive_common_cli.cpp:51
Definition: interactive_common_cli.hpp:37
void printMenu(const std::string &message, MenuPoints menu_points)
Definition: interactive_common_cli.cpp:73
std::vector< std::string > MenuPoints
Definition: interactive_common_cli.hpp:60
void printCommandParameters(std::string &command, const ParamsDescription ¶meters)
Definition: interactive_common_cli.cpp:64
size_t addMenuPoint(std::vector< std::string > &menu_points, const std::string &description, const std::string &command_short_name)
Definition: interactive_common_cli.cpp:161
Definition: interactive_common_cli.hpp:43
std::size_t getNextIndex(std::unordered_map< K, V > parsers_map)
Definition: interactive_common_cli.hpp:184
boost::optional< std::vector< std::string > > parseParams(std::string line, std::string command_name, ParamsMap ¶ms_map)
Definition: interactive_common_cli.cpp:117
boost::optional< std::string > parseFirstCommand(std::string line)
Definition: parser.cpp:20
std::unordered_map< std::string, ParamsDescription > ParamsMap
Definition: interactive_common_cli.hpp:62
boost::optional< T > handleParse(C class_pointer, std::string &line, std::unordered_map< std::string, V > &parsers_map, ParamsMap ¶ms_map)
Definition: interactive_common_cli.hpp:234
void printEnd()
Definition: interactive_common_cli.cpp:98
void addBackOption(MenuPoints &menu)
Definition: interactive_common_cli.cpp:55
std::string cache
Definition: interactive_common_cli.hpp:52
boost::optional< std::pair< std::string, uint16_t > > parseIrohaPeerParams(std::vector< std::string > params, const std::string &default_ip, int default_port)
Definition: interactive_common_cli.cpp:102
ParamsMap getCommonParamsMap(const std::string &default_ip, int default_port)
Definition: interactive_common_cli.cpp:24
std::unordered_map< std::string, std::string > DescriptionMap
Definition: interactive_common_cli.hpp:58
const std::string SEND_CODE
Definition: interactive_common_cli.hpp:66
ParamsDescription makeParamsDescription(const std::vector< std::string > ¶ms)
Definition: interactive_common_cli.cpp:36
MenuPoints formMenu(std::unordered_map< std::string, V > &parsers_map, ParamsMap ¶msMap, const DescriptionMap descriptionMap)
Definition: interactive_common_cli.hpp:291
Definition: interactive_common_cli.hpp:19
void addCliCommand(MenuPoints &menu_points, std::unordered_map< std::string, V > &parsers_map, const std::string &command_name, const std::string &command_description, V parser)
Definition: interactive_common_cli.hpp:268
boost::optional< V & > findInHandlerMap(K command_name, std::unordered_map< K, V > ¶ms_map)
Definition: interactive_common_cli.hpp:198
void handleEmptyCommand()
Definition: interactive_common_cli.cpp:47
Definition: interactive_common_cli.hpp:33
std::string message
Definition: interactive_common_cli.hpp:47
bool isBackOption(std::string line)
Definition: interactive_common_cli.cpp:59