Skip to content

Commit 49dd7ab

Browse files
committed
telegramparser: return std::optional<std::string> instead of passing it by ref argument
1 parent f5d6d1e commit 49dd7ab

File tree

4 files changed

+26
-42
lines changed

4 files changed

+26
-42
lines changed

vpr/src/server/gateio.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,7 @@ GateIO::ActivityStatus GateIO::handleTelegrams(std::vector<comm::TelegramFramePt
157157
m_logger.queue(LogLevel::Detail, "received composed", getPrettySizeStrFromBytesNum(message.size()), ":", getTruncatedMiddleStr(message));
158158
std::optional<int> jobIdOpt = comm::TelegramParser::tryExtractFieldJobId(message);
159159
std::optional<int> cmdOpt = comm::TelegramParser::tryExtractFieldCmd(message);
160-
std::optional<std::string> optionsOpt;
161-
comm::TelegramParser::tryExtractFieldOptions(message, optionsOpt);
160+
std::optional<std::string> optionsOpt = comm::TelegramParser::tryExtractFieldOptions(message);
162161
if (jobIdOpt && cmdOpt && optionsOpt) {
163162
TaskPtr task = std::make_unique<Task>(jobIdOpt.value(), cmdOpt.value(), optionsOpt.value());
164163
const comm::TelegramHeader& header = telegramFrame->header;

vpr/src/server/telegramparser.cpp

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,75 +5,68 @@
55

66
namespace comm {
77

8-
bool TelegramParser::tryExtractJsonValueStr(const std::string& jsonString, const std::string& key, std::optional<std::string>& result)
8+
std::optional<std::string> TelegramParser::tryExtractJsonValueStr(const std::string& jsonString, const std::string& key)
99
{
1010
// Find the position of the key
1111
size_t keyPos = jsonString.find("\"" + key + "\":");
1212

1313
if (keyPos == std::string::npos) {
1414
// Key not found
15-
return false;
15+
return std::nullopt;
1616
}
1717

1818
// Find the position of the value after the key
1919
size_t valuePosStart = jsonString.find("\"", keyPos + key.length() + std::string("\":\"").size());
2020

2121
if (valuePosStart == std::string::npos) {
2222
// Value not found
23-
return false;
23+
return std::nullopt;
2424
}
2525

2626
// Find the position of the closing quote for the value
2727
size_t valueEnd = jsonString.find("\"", valuePosStart + std::string("\"").size());
2828

2929
if (valueEnd == std::string::npos) {
3030
// Closing quote not found
31-
return false;
31+
return std::nullopt;
3232
}
3333

3434
// Extract the value substring
35-
result = jsonString.substr(valuePosStart + 1, (valueEnd - valuePosStart) - 1);
36-
return true;
35+
return jsonString.substr(valuePosStart + 1, (valueEnd - valuePosStart) - 1);
3736
}
3837

3938
std::optional<int> TelegramParser::tryExtractFieldJobId(const std::string& message)
4039
{
41-
std::optional<int> result;
42-
std::optional<std::string> strOpt;
43-
if (tryExtractJsonValueStr(message, comm::KEY_JOB_ID, strOpt)) {
44-
result = tryConvertToInt(strOpt.value());
40+
if (std::optional<std::string> strOpt = tryExtractJsonValueStr(message, comm::KEY_JOB_ID)) {
41+
return tryConvertToInt(strOpt.value());
4542
}
46-
return result;
43+
return std::nullopt;
4744
}
4845

4946
std::optional<int> TelegramParser::tryExtractFieldCmd(const std::string& message)
5047
{
51-
std::optional<int> result;
52-
std::optional<std::string> strOpt;
53-
if (tryExtractJsonValueStr(message, comm::KEY_CMD, strOpt)) {
54-
result = tryConvertToInt(strOpt.value());
48+
if (std::optional<std::string> strOpt = tryExtractJsonValueStr(message, comm::KEY_CMD)) {
49+
return tryConvertToInt(strOpt.value());
5550
}
56-
return result;
51+
return std::nullopt;
5752
}
5853

59-
bool TelegramParser::tryExtractFieldOptions(const std::string& message, std::optional<std::string>& result)
54+
std::optional<std::string> TelegramParser::tryExtractFieldOptions(const std::string& message)
6055
{
61-
return tryExtractJsonValueStr(message, comm::KEY_OPTIONS, result);
56+
return tryExtractJsonValueStr(message, comm::KEY_OPTIONS);
6257
}
6358

64-
bool TelegramParser::tryExtractFieldData(const std::string& message, std::optional<std::string>& result)
59+
std::optional<std::string> TelegramParser::tryExtractFieldData(const std::string& message)
6560
{
66-
return tryExtractJsonValueStr(message, comm::KEY_DATA, result);
61+
return tryExtractJsonValueStr(message, comm::KEY_DATA);
6762
}
6863

6964
std::optional<int> TelegramParser::tryExtractFieldStatus(const std::string& message)
7065
{
71-
std::optional<int> result;
72-
std::optional<std::string> strOpt;
73-
if (tryExtractJsonValueStr(message, comm::KEY_STATUS, strOpt)) {
74-
result = tryConvertToInt(strOpt.value());
66+
if (std::optional<std::string> strOpt = tryExtractJsonValueStr(message, comm::KEY_STATUS)) {
67+
return tryConvertToInt(strOpt.value());
7568
}
76-
return result;
69+
return std::nullopt;
7770
}
7871

7972
} // namespace comm

vpr/src/server/telegramparser.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ class TelegramParser {
1616
public:
1717
static std::optional<int> tryExtractFieldJobId(const std::string& message);
1818
static std::optional<int> tryExtractFieldCmd(const std::string& message);
19-
static bool tryExtractFieldOptions(const std::string& message, std::optional<std::string>& result);
20-
static bool tryExtractFieldData(const std::string& message, std::optional<std::string>& result);
19+
static std::optional<std::string> tryExtractFieldOptions(const std::string& message);
20+
static std::optional<std::string> tryExtractFieldData(const std::string& message);
2121
static std::optional<int> tryExtractFieldStatus(const std::string& message);
2222

2323
private:
24-
static bool tryExtractJsonValueStr(const std::string& jsonString, const std::string& key, std::optional<std::string>& result);
24+
static std::optional<std::string> tryExtractJsonValueStr(const std::string& jsonString, const std::string& key);
2525
};
2626

2727
} // namespace comm

vpr/test/test_server_telegramparser.cpp

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,8 @@ TEST_CASE("test_server_telegram_parser_base", "[vpr]")
99

1010
REQUIRE(std::optional<int>{7} == comm::TelegramParser::tryExtractFieldJobId(tdata));
1111
REQUIRE(std::optional<int>{2} == comm::TelegramParser::tryExtractFieldCmd(tdata));
12-
std::optional<std::string> optionsOpt;
13-
REQUIRE(comm::TelegramParser::tryExtractFieldOptions(tdata, optionsOpt) == true);
14-
REQUIRE(std::optional<std::string>{"type1:name1:value1;type2:name2:v a l u e 2;t3:n3:v3"} == optionsOpt);
15-
std::optional<std::string> dataOpt;
16-
REQUIRE(comm::TelegramParser::tryExtractFieldData(tdata, dataOpt) == true);
17-
REQUIRE(std::optional<std::string>{"some_data..."} == dataOpt);
12+
REQUIRE(std::optional<std::string>{"type1:name1:value1;type2:name2:v a l u e 2;t3:n3:v3"} == comm::TelegramParser::tryExtractFieldOptions(tdata));
13+
REQUIRE(std::optional<std::string>{"some_data..."} == comm::TelegramParser::tryExtractFieldData(tdata));
1814
REQUIRE(std::optional<int>{1} == comm::TelegramParser::tryExtractFieldStatus(tdata));
1915
}
2016

@@ -24,12 +20,8 @@ TEST_CASE("test_server_telegram_parser_invalid_keys", "[vpr]")
2420

2521
REQUIRE(std::nullopt == comm::TelegramParser::tryExtractFieldJobId(tBadData));
2622
REQUIRE(std::nullopt == comm::TelegramParser::tryExtractFieldCmd(tBadData));
27-
std::optional<std::string> optionsOpt;
28-
REQUIRE_FALSE(comm::TelegramParser::tryExtractFieldOptions(tBadData, optionsOpt));
29-
REQUIRE(std::nullopt == optionsOpt);
30-
std::optional<std::string> dataOpt;
31-
REQUIRE_FALSE(comm::TelegramParser::tryExtractFieldData(tBadData, dataOpt));
32-
REQUIRE(std::nullopt == dataOpt);
23+
REQUIRE(std::nullopt == comm::TelegramParser::tryExtractFieldOptions(tBadData));
24+
REQUIRE(std::nullopt == comm::TelegramParser::tryExtractFieldData(tBadData));
3325
REQUIRE(std::nullopt == comm::TelegramParser::tryExtractFieldStatus(tBadData));
3426
}
3527

0 commit comments

Comments
 (0)