12 std::string resultString =
"success";
14 for (
auto [key, value] : config.items()) {
16 if (value.is_null()) {
18 resultString =
"Found null value for parameter " + key;
25 auto iter = configParamList.find(key);
26 if (iter == configParamList.end()) {
28 resultString =
"Found unknown parameter: " + key +
": JSON=" + config.dump();
32 auto paramType = std::get<0>(iter->second);
33 auto paramSize = std::get<1>(iter->second);
34 auto paramSingleOnly = !std::get<2>(iter->second);
38 if (paramSingleOnly) {
39 if (!
checkType(value, paramType, paramSize)) {
41 resultString =
"Incorrect JSON type for parameter " + key;
60 if (value.type() == JSON::value_t::object) {
64 resultString = std::move(ppcResultString);
69 if (!
checkType(value, paramType, paramSize)) {
71 resultString =
"Incorrect JSON type for parameter " + key;
84 return {result, resultString};
91 std::string resultString =
"success";
93 for (
auto [key, value] : paramValue.items()) {
98 for (
unsigned int side = 0; side <
m_nSides; side++) {
107 int vsize = value.size();
108 if (vsize == 1 || vsize == paramSize) {
115 resultString =
"Incorrect JSON type for parameter " + key;
122 else if (paramType == JSON::value_t::array) {
123 int elementSize = value[0].size();
124 JSON::value_t elementType = value[0].type();
125 size_t arrayLength = value.size();
132 if (arrayLength ==
m_numChannelsPerSide && elementType == paramType &&
int(elementSize) == paramSize) {
140 else if (
int(arrayLength) == paramSize || paramSize == -1) {
148 resultString =
"Invalid value format for array parameter " + paramKey +
" on side " +
m_sideLabels[side];
152 else if (paramType == JSON::value_t::object) {
163 resultString =
"Invalid array length for parameter " + paramKey +
" on side " +
m_sideLabels[side];
171 if (!
checkType(value[chan], paramType)) {
173 resultString =
"Incorrect JSON type for parameter " + paramKey +
"paramType = " +
174 std::to_string((
unsigned int) paramType) +
", value type = " + std::to_string((
unsigned int) value[chan].
type());
186 std::string keyRemainder = key.substr(
m_sideLabels[side].
size(), std::string::npos);
188 int chanIndex = std::stoi(keyRemainder);
191 resultString =
"Invalid channel specifier in values for parameter " + key;
195 if (!
checkType(value, paramType, paramSize)) {
197 resultString =
"Incorrect JSON type for parameter " + key;
205 resultString =
"Invalid channel specifier for parameter " + key;
215 resultString =
"Exception caught while parsing key " + key;
219 return {result, resultString};