mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-11 10:25:47 +02:00
add new method to CmdArgParser (#2244)
* add new method to CmdArgParser * refactor: rename method
This commit is contained in:
parent
2381316866
commit
a57c6dac1e
3 changed files with 31 additions and 6 deletions
|
@ -34,6 +34,19 @@ CmdArgParser::CheckProxy::operator bool() const {
|
|||
return true;
|
||||
}
|
||||
|
||||
void CmdArgParser::ExptectTag(std::string_view tag) {
|
||||
if (cur_i_ >= args_.size()) {
|
||||
Report(OUT_OF_BOUNDS, cur_i_);
|
||||
return;
|
||||
}
|
||||
|
||||
auto idx = cur_i_++;
|
||||
auto val = ToSV(args_[idx]);
|
||||
if (!absl::EqualsIgnoreCase(val, tag)) {
|
||||
Report(INVALID_NEXT, idx);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T> T CmdArgParser::Num(size_t idx) {
|
||||
auto arg = SafeSV(idx);
|
||||
T out;
|
||||
|
|
|
@ -14,12 +14,7 @@ namespace facade {
|
|||
|
||||
// Utility class for easily parsing command options from argument lists.
|
||||
struct CmdArgParser {
|
||||
enum ErrorType {
|
||||
OUT_OF_BOUNDS,
|
||||
SHORT_OPT_TAIL,
|
||||
INVALID_INT,
|
||||
INVALID_CASES,
|
||||
};
|
||||
enum ErrorType { OUT_OF_BOUNDS, SHORT_OPT_TAIL, INVALID_INT, INVALID_CASES, INVALID_NEXT };
|
||||
|
||||
struct CheckProxy {
|
||||
explicit operator bool() const;
|
||||
|
@ -93,6 +88,10 @@ struct CmdArgParser {
|
|||
}
|
||||
}
|
||||
|
||||
// check next value ignoring case and consume it
|
||||
void ExptectTag(std::string_view tag);
|
||||
|
||||
// Consume next value
|
||||
template <class... Cases> auto Switch(Cases&&... cases) {
|
||||
if (cur_i_ >= args_.size())
|
||||
Report(OUT_OF_BOUNDS, cur_i_);
|
||||
|
|
|
@ -83,6 +83,19 @@ TEST_F(CmdArgParserTest, Check) {
|
|||
EXPECT_TRUE(parser.Check("TAG_2").ExpectTail(1));
|
||||
}
|
||||
|
||||
TEST_F(CmdArgParserTest, NextStatement) {
|
||||
auto parser = Make({"TAG", "tag_2", "tag_3"});
|
||||
|
||||
parser.ExptectTag("TAG");
|
||||
EXPECT_FALSE(parser.Error());
|
||||
|
||||
parser.ExptectTag("TAG_2");
|
||||
EXPECT_FALSE(parser.Error());
|
||||
|
||||
parser.ExptectTag("TAG_2");
|
||||
EXPECT_TRUE(parser.Error());
|
||||
}
|
||||
|
||||
TEST_F(CmdArgParserTest, CheckTailFail) {
|
||||
auto parser = Make({"TAG", "11", "22", "TAG", "33"});
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue