| 180 | } |
| 181 | |
| 182 | Json applyMergeOperation(Json const& base, Json const& op) { |
| 183 | String path = op.getString("path"); |
| 184 | auto pointer = JsonPath::Pointer(path); |
| 185 | |
| 186 | if (op.contains("search")) { |
| 187 | auto searchable = pointer.get(base); |
| 188 | auto searchValue = op.get("search"); |
| 189 | if (size_t index = findJsonMatch(searchable, searchValue, pointer)) |
| 190 | return pointer.add(pointer.remove(base), searchable.set(index - 1, jsonMerge(searchable.get(index - 1), op.get("value")))); |
| 191 | else |
| 192 | return base; |
| 193 | } else { |
| 194 | return pointer.add(pointer.remove(base), jsonMerge(pointer.get(base), op.get("value"))); |
| 195 | } |
| 196 | } |
| 197 | } |
| 198 | |
| 199 | } |