diff --git a/Userland/Libraries/LibCore/ArgsParser.cpp b/Userland/Libraries/LibCore/ArgsParser.cpp index aa3d0be53d..8e8f09c98e 100644 --- a/Userland/Libraries/LibCore/ArgsParser.cpp +++ b/Userland/Libraries/LibCore/ArgsParser.cpp @@ -430,6 +430,27 @@ void ArgsParser::add_option(DeprecatedString& value, char const* help_string, ch add_option(move(option)); } +void ArgsParser::add_option(String& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) +{ + Option option { + OptionArgumentMode::Required, + help_string, + long_name, + short_name, + value_name, + [&value](StringView s) { + auto value_or_error = String::from_utf8(s); + if (value_or_error.is_error()) + return false; + + value = value_or_error.release_value(); + return true; + }, + hide_mode, + }; + add_option(move(option)); +} + void ArgsParser::add_option(StringView& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) { Option option { @@ -610,6 +631,25 @@ void ArgsParser::add_positional_argument(StringView& value, char const* help_str add_positional_argument(move(arg)); } +void ArgsParser::add_positional_argument(String& value, char const* help_string, char const* name, Required required) +{ + Arg arg { + help_string, + name, + required == Required::Yes ? 1 : 0, + 1, + [&value](StringView s) { + auto value_or_error = String::from_utf8(s); + if (value_or_error.is_error()) + return false; + + value = value_or_error.release_value(); + return true; + } + }; + add_positional_argument(move(arg)); +} + template void ArgsParser::add_positional_argument(I& value, char const* help_string, char const* name, Required required) { diff --git a/Userland/Libraries/LibCore/ArgsParser.h b/Userland/Libraries/LibCore/ArgsParser.h index 5c30ff68de..8450c0d75b 100644 --- a/Userland/Libraries/LibCore/ArgsParser.h +++ b/Userland/Libraries/LibCore/ArgsParser.h @@ -88,6 +88,7 @@ public: void add_ignored(char const* long_name, char short_name, OptionHideMode hide_mode = OptionHideMode::None); void add_option(bool& value, char const* help_string, char const* long_name, char short_name, OptionHideMode hide_mode = OptionHideMode::None); void add_option(DeprecatedString& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode = OptionHideMode::None); + void add_option(String& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode = OptionHideMode::None); void add_option(StringView& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode = OptionHideMode::None); template void add_option(I& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode = OptionHideMode::None); @@ -102,6 +103,7 @@ public: void add_positional_argument(Arg&&); void add_positional_argument(DeprecatedString& value, char const* help_string, char const* name, Required required = Required::Yes); void add_positional_argument(StringView& value, char const* help_string, char const* name, Required required = Required::Yes); + void add_positional_argument(String& value, char const* help_string, char const* name, Required required = Required::Yes); template void add_positional_argument(I& value, char const* help_string, char const* name, Required required = Required::Yes); void add_positional_argument(double& value, char const* help_string, char const* name, Required required = Required::Yes);