waybar/include/util/json.hpp

37 lines
743 B
C++
Raw Normal View History

2018-08-13 21:23:43 +02:00
#pragma once
#include <fmt/ostream.h>
2018-08-13 21:23:43 +02:00
#include <json/json.h>
#if (FMT_VERSION >= 90000)
template <>
struct fmt::formatter<Json::Value> : ostream_formatter {};
#endif
2018-08-13 21:23:43 +02:00
namespace waybar::util {
struct JsonParser {
2019-05-13 15:15:50 +02:00
JsonParser() {}
const Json::Value parse(const std::string& data) const {
Json::Value root(Json::objectValue);
if (data.empty()) {
return root;
}
2019-05-13 15:15:50 +02:00
std::unique_ptr<Json::CharReader> const reader(builder_.newCharReader());
2022-04-06 08:37:19 +02:00
std::string err;
2019-05-13 15:15:50 +02:00
bool res = reader->parse(data.c_str(), data.c_str() + data.size(), &root, &err);
2019-04-18 17:52:00 +02:00
if (!res) throw std::runtime_error(err);
return root;
}
2018-08-20 14:50:45 +02:00
~JsonParser() = default;
2019-04-18 17:52:00 +02:00
private:
2019-05-13 15:15:50 +02:00
Json::CharReaderBuilder builder_;
};
2018-08-13 21:23:43 +02:00
2019-04-18 17:52:00 +02:00
} // namespace waybar::util