Skip to content

Commit b156a08

Browse files
committed
[OCC] Fix serialization of Transition arguments
1 parent 9698987 commit b156a08

4 files changed

Lines changed: 37 additions & 15 deletions

File tree

occ/plugin/OccFMQCommon.cxx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ std::tuple<OccLite::nopb::TransitionResponse, ::grpc::Status> doTransition(fair:
8989
"sndKernelSize"
9090
};
9191
for (auto it = arguments.cbegin(); it != arguments.cend(); ++it) {
92-
std::string key = it->first;
93-
std::string value = it->second;
92+
std::string key = it->key;
93+
std::string value = it->value;
9494
if (boost::starts_with(key, "chans.")) {
9595
key.erase(0, 6);
9696
std::vector<std::string> split;
@@ -138,8 +138,8 @@ std::tuple<OccLite::nopb::TransitionResponse, ::grpc::Status> doTransition(fair:
138138
if (evt == fair::mq::PluginServices::DeviceStateTransition::InitDevice) {
139139
std::unordered_map<std::string, std::unordered_map<std::string, std::string>> channels;
140140
for (auto it = arguments.cbegin(); it != arguments.cend(); ++it) {
141-
std::string key = it->first;
142-
std::string value = it->second;
141+
std::string key = it->key;
142+
std::string value = it->value;
143143
if (boost::starts_with(key, "chans.")) {
144144
key.erase(0, 6);
145145
std::vector<std::string> split;
@@ -171,8 +171,8 @@ std::tuple<OccLite::nopb::TransitionResponse, ::grpc::Status> doTransition(fair:
171171
// Run number must be pushed immediately before RUN transition
172172
else if (evt == fair::mq::PluginServices::DeviceStateTransition::Run) {
173173
try {
174-
for (auto const& [key, value] : arguments) {
175-
m_pluginServices->SetProperty(key, value);
174+
for (auto const& entry : arguments) {
175+
m_pluginServices->SetProperty(entry.key, entry.value);
176176
}
177177
}
178178
catch (std::runtime_error &e) {

occ/plugin/litestructs/GetState.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ struct GetStateResponse : public JsonMessage
5454
} // namespace nopb
5555
} // namespace OccLite
5656

57-
5857
namespace grpc
5958
{
6059
template<>

occ/plugin/litestructs/Transition.cxx

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,7 @@ bool OccLite::nopb::TransitionRequest::Serialize(rapidjson::Writer<rapidjson::St
3232
writer->String("transitionEvent"); writer->String(transitionEvent);
3333
writer->String("arguments"); writer->StartArray();
3434
for (const auto& it : arguments) {
35-
writer->StartObject();
36-
writer->String("key"); writer->String(it.first);
37-
writer->String("value"); writer->String(it.second);
38-
writer->EndObject();
35+
it.Serialize(writer);
3936
}
4037
writer->EndArray();
4138
writer->EndObject();
@@ -52,9 +49,10 @@ bool OccLite::nopb::TransitionRequest::Deserialize(const rapidjson::Value& obj)
5249

5350
if (obj.HasMember("arguments")) {
5451
auto array = obj["arguments"].GetArray();
55-
for (const auto& it : array) {
56-
auto thisItem = it.GetObject();
57-
arguments[thisItem["key"].GetString()] = thisItem["value"].GetString();
52+
for (auto it = array.Begin(); it != array.End(); ++it) {
53+
ConfigEntry *ce = new ConfigEntry;
54+
ce->Deserialize(*it);
55+
arguments.push_back(*ce);
5856
}
5957
}
6058
OLOG(INFO) << "Deserialized TransitionRequest:";
@@ -80,3 +78,21 @@ bool OccLite::nopb::TransitionResponse::Deserialize(const rapidjson::Value& obj)
8078
{
8179
return false;
8280
}
81+
82+
bool OccLite::nopb::ConfigEntry::Serialize(rapidjson::Writer<rapidjson::StringBuffer>* writer) const
83+
{
84+
writer->StartObject();
85+
writer->String("key");
86+
writer->String(key);
87+
writer->String("value");
88+
writer->String(value);
89+
writer->EndObject();
90+
return true;
91+
}
92+
93+
bool OccLite::nopb::ConfigEntry::Deserialize(const rapidjson::Value& obj)
94+
{
95+
key = obj["key"].GetString();
96+
value = obj["value"].GetString();
97+
return true;
98+
}

occ/plugin/litestructs/Transition.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,18 @@ namespace OccLite
3939
namespace nopb
4040
{
4141

42+
struct ConfigEntry : public JsonMessage {
43+
std::string key;
44+
std::string value;
45+
46+
bool Serialize(rapidjson::Writer<rapidjson::StringBuffer>* writer) const override;
47+
bool Deserialize(const rapidjson::Value& obj) override;
48+
};
4249
struct TransitionRequest : public JsonMessage
4350
{
4451
std::string srcState;
4552
std::string transitionEvent;
46-
std::map<std::string, std::string> arguments;
53+
std::vector<ConfigEntry> arguments;
4754

4855
bool Serialize(rapidjson::Writer<rapidjson::StringBuffer>* writer) const override;
4956
bool Deserialize(const rapidjson::Value& obj) override;

0 commit comments

Comments
 (0)