From 251318d2da77fa370d4c7b9cd48f24866570e293 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 19 Jun 2020 05:50:18 +0300 Subject: [PATCH] Add OptionParser::add_check. GitOrigin-RevId: dbf50403ba264ddf04b50197f0b54500c8f761ce --- td/telegram/cli.cpp | 13 ++++++------- tdutils/td/utils/OptionParser.cpp | 7 +++++++ tdutils/td/utils/OptionParser.h | 3 +++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index 1e336d7ec..5373359ca 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -4356,6 +4356,12 @@ void main(int argc, char **argv) { [&](Slice parameter) { api_id = to_integer(parameter); }); options.add_option('\0', "api-hash", "Set Telegram API hash", [&](Slice parameter) { api_hash = parameter.str(); }); options.add_option('\0', "api_hash", "Set Telegram API hash", [&](Slice parameter) { api_hash = parameter.str(); }); + options.add_check([&] { + if (api_id == 0 || api_hash.empty()) { + return Status::Error("You must provide valid api-id and api-hash obtained at https://my.telegram.org"); + } + return Status::OK(); + }); auto res = options.run(argc, argv); if (res.is_error()) { LOG(PLAIN) << "tg_cli: " << res.error().message(); @@ -4369,13 +4375,6 @@ void main(int argc, char **argv) { return; } - if (api_id == 0 || api_hash.empty()) { - LOG(PLAIN) << "tg_cli: " - << "You should provide some valid api_id and api_hash"; - LOG(PLAIN) << options; - return; - } - SET_VERBOSITY_LEVEL(new_verbosity_level); { diff --git a/tdutils/td/utils/OptionParser.cpp b/tdutils/td/utils/OptionParser.cpp index 77a32c8ba..da7024d75 100644 --- a/tdutils/td/utils/OptionParser.cpp +++ b/tdutils/td/utils/OptionParser.cpp @@ -47,6 +47,10 @@ void OptionParser::add_option(char short_key, Slice long_key, Slice description, }); } +void OptionParser::add_check(std::function check) { + checks_.push_back(std::move(check)); +} + Result> OptionParser::run(int argc, char *argv[]) { std::unordered_map short_options; std::unordered_map long_options; @@ -143,6 +147,9 @@ Result> OptionParser::run(int argc, char *argv[]) { TRY_STATUS(option->arg_callback(parameter)); } } + for (auto &check : checks_) { + TRY_STATUS(check()); + } return std::move(non_options); } diff --git a/tdutils/td/utils/OptionParser.h b/tdutils/td/utils/OptionParser.h index 3ddabf232..0de46eda8 100644 --- a/tdutils/td/utils/OptionParser.h +++ b/tdutils/td/utils/OptionParser.h @@ -40,6 +40,8 @@ class OptionParser { void add_option(char short_key, Slice long_key, Slice description, std::function callback); + void add_check(std::function check); + // returns found non-option parameters Result> run(int argc, char *argv[]) TD_WARN_UNUSED_RESULT; @@ -47,6 +49,7 @@ class OptionParser { private: vector