vengi/src/tests/testtraze/JSON.h

75 lines
1.6 KiB
C
Raw Normal View History

2017-04-14 04:36:25 -07:00
/**
* @file
*/
2017-04-14 04:07:54 -07:00
#pragma once
#define JSON_NOEXCEPTION
2016-11-18 11:10:04 -08:00
#include "json.hpp"
2018-11-03 09:12:51 -07:00
#include <glm/vec2.hpp>
#include <glm/vec3.hpp>
#include <glm/vec4.hpp>
2016-11-18 11:10:04 -08:00
namespace core {
using json = ::nlohmann::json;
}
2018-11-03 09:12:51 -07:00
namespace glm {
template<typename T, qualifier Q = defaultp>
void to_json(::core::json& j, const vec<2, T, Q>& p) {
j = ::core::json{{"x", p.x}, {"y", p.y}};
}
template<typename T, qualifier Q = defaultp>
void from_json(const ::core::json& j, vec<2, T, Q>& p) {
if (j.is_array() && j.size() == 2) {
p.x = j[0].get<T>();
p.y = j[1].get<T>();
return;
}
p.x = j.at("x").get<T>();
p.y = j.at("y").get<T>();
}
template<typename T, qualifier Q = defaultp>
void to_json(::core::json& j, const vec<3, T, Q>& p) {
j = ::core::json{{"x", p.x}, {"y", p.y}, {"z", p.z}};
}
template<typename T, qualifier Q = defaultp>
void from_json(const ::core::json& j, vec<3, T, Q>& p) {
if (j.is_array() && j.size() == 3) {
p.x = j[0].get<T>();
p.y = j[1].get<T>();
p.z = j[2].get<T>();
return;
}
p.x = j.at("x").get<T>();
p.y = j.at("y").get<T>();
p.z = j.at("z").get<T>();
}
template<typename T, qualifier Q = defaultp>
void to_json(::core::json& j, const vec<4, T, Q>& p) {
j = ::core::json{{"x", p.x}, {"y", p.y}, {"z", p.z}, {"w", p.w}};
}
template<typename T, qualifier Q = defaultp>
void from_json(const ::core::json& j, vec<4, T, Q>& p) {
if (j.is_array() && j.size() == 4) {
p.x = j[0].get<T>();
p.y = j[1].get<T>();
p.z = j[2].get<T>();
p.w = j[3].get<T>();
return;
}
p.x = j.at("x").get<T>();
p.y = j.at("y").get<T>();
p.z = j.at("z").get<T>();
p.z = j.at("w").get<T>();
}
}