diff --git a/tdutils/td/utils/OptionParser.cpp b/tdutils/td/utils/OptionParser.cpp index fcaaf224f..fbbcb8421 100644 --- a/tdutils/td/utils/OptionParser.cpp +++ b/tdutils/td/utils/OptionParser.cpp @@ -7,12 +7,18 @@ #include "td/utils/OptionParser.h" #include "td/utils/logging.h" +#include "td/utils/PathView.h" #include #include namespace td { +void OptionParser::set_usage(Slice executable_name, Slice usage) { + PathView path_view(executable_name); + usage_ = PSTRING() << path_view.file_name() << " " << usage; +} + void OptionParser::set_description(string description) { description_ = std::move(description); } @@ -170,6 +176,9 @@ Result> OptionParser::run(int argc, char *argv[], int expected_no } StringBuilder &operator<<(StringBuilder &sb, const OptionParser &o) { + if (!o.usage_.empty()) { + sb << "Usage: " << o.usage_ << "\n\n"; + } if (!o.description_.empty()) { sb << o.description_ << ". "; } diff --git a/tdutils/td/utils/OptionParser.h b/tdutils/td/utils/OptionParser.h index d1ba27f3d..6ca4cd759 100644 --- a/tdutils/td/utils/OptionParser.h +++ b/tdutils/td/utils/OptionParser.h @@ -45,6 +45,8 @@ class OptionParser { }; } + void set_usage(Slice executable_name, Slice usage); + void set_description(string description); void add_checked_option(char short_key, Slice long_key, Slice description, std::function callback); @@ -69,6 +71,7 @@ class OptionParser { private: vector