#pragma once #include #include namespace nlohmann { class JsonPatchFormatException : public std::exception { public: explicit JsonPatchFormatException(std::string msg) : ex_{std::move(msg)} {} inline const char *what() const noexcept override final { return ex_.c_str(); } private: std::string ex_; }; class json_patch { public: json_patch() = default; json_patch(json &&patch); json_patch(const json &patch); json_patch &add(const json::json_pointer &, json value); json_patch &replace(const json::json_pointer &, json value); json_patch &remove(const json::json_pointer &); json &get_json() { return j_; } const json &get_json() const { return j_; } operator json() const { return j_; } private: json j_ = nlohmann::json::array(); static void validateJsonPatch(json const &patch); }; } // namespace nlohmann