aboutsummaryrefslogtreecommitdiffhomepage
path: root/tdutils/td/utils/OptionParser.h
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2020-06-17 03:04:36 +0300
committerlevlam <levlam@telegram.org>2020-06-17 03:04:36 +0300
commitc46910d75f6b6c1341330f2b80da9958b50ca2da (patch)
treecf77dd6c2223059983a5b32d119039d34bc0534a /tdutils/td/utils/OptionParser.h
parent4bb6fe7e78ce88f28b060ede339a2c66e5027531 (diff)
Add portable option parser.
GitOrigin-RevId: 0d4f7e2f5bec4826e1c12e3aa1aee642fcf6da07
Diffstat (limited to 'tdutils/td/utils/OptionParser.h')
-rw-r--r--tdutils/td/utils/OptionParser.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/tdutils/td/utils/OptionParser.h b/tdutils/td/utils/OptionParser.h
new file mode 100644
index 000000000..ecc520090
--- /dev/null
+++ b/tdutils/td/utils/OptionParser.h
@@ -0,0 +1,49 @@
+//
+// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2020
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+#pragma once
+
+#include "td/utils/common.h"
+#include "td/utils/Slice.h"
+#include "td/utils/Status.h"
+#include "td/utils/StringBuilder.h"
+
+#include <functional>
+
+namespace td {
+
+class OptionParser {
+ class Option {
+ public:
+ enum class Type { NoArg, Arg };
+ Type type;
+ char short_key;
+ string long_key;
+ string description;
+ std::function<Status(Slice)> arg_callback;
+ };
+
+ void add_option(Option::Type type, char short_key, Slice long_key, Slice description,
+ std::function<Status(Slice)> callback);
+
+ public:
+ void set_description(string description);
+
+ void add_option(char short_key, Slice long_key, Slice description, std::function<Status(Slice)> callback);
+
+ void add_option(char short_key, Slice long_key, Slice description, std::function<Status(void)> callback);
+
+ // returns found non-option parameters
+ Result<vector<char *>> run(int argc, char *argv[]) TD_WARN_UNUSED_RESULT;
+
+ friend StringBuilder &operator<<(StringBuilder &sb, const OptionParser &o);
+
+ private:
+ vector<Option> options_;
+ string description_;
+};
+
+} // namespace td