#include "json_helper.hpp" #include #include using json = nlohmann::json; template json_object *to_json_(T const *s) { auto j = json::object({ {"id", s->id}, {"size", {{"width", s->size.w}, {"height", s->size.h}}}, {"dst", {{"width", s->dst_rect.w}, {"height", s->dst_rect.h}, {"x", s->dst_rect.x}, {"y", s->dst_rect.y}}}, {"src", {{"width", s->src_rect.w}, {"height", s->src_rect.h}, {"x", s->src_rect.x}, {"y", s->src_rect.y}}}, {"visibility", s->visibility}, {"opacity", s->opacity}, {"orientation", s->orientation}, }); return json_tokener_parse(j.dump().c_str()); } json_object *to_json(genivi::surface const *s) { return to_json_(s); } json_object *to_json(genivi::layer const *l) { return to_json_(l); } json_object *to_json(genivi::screen const *s) { auto o = json_object_new_object(); json_object_object_add(o, "id", json_object_new_int(s->id)); return o; } template json_object *to_json_(T const &s) { auto a = json_object_new_array(); if (!s.empty()) { for (auto const &i : s) { json_object_array_add(a, to_json(i.second.get())); } } return a; } json_object *to_json(genivi::controller::surface_map_type const &s) { return to_json_(s); } json_object *to_json(genivi::controller::layer_map_type const &l) { return to_json_(l); } json_object *to_json(genivi::controller::screen_map_type const &s) { return to_json_(s); } json_object *to_json(std::vector const &v) { auto a = json_object_new_array(); for (const auto i : v) { json_object_array_add(a, json_object_new_int(i)); } return a; }