← Back to file list Raw

src/U_JSON.h

#pragma once
#include "nlohmann/json.hpp"
#include "VHACD.h"
#include "U_Types.h"
template<typename T>
T GetFromJson(const nlohmann::json& _json, const std::string& key, T fallback = T{})
{
if(_json.contains(key))
{
auto& val = _json[key];
if constexpr (std::is_arithmetic_v<T>)
{
if(val.is_number())
{
return val.get<T>();
}
}
if constexpr (std::is_same_v<T, std::string> || std::is_same_v<T, std::wstring>)
{
if(val.is_string())
{
return val.get<T>();
}
}
if constexpr (std::is_same_v<T, bool>)
{
if(val.is_boolean())
{
return val.get<T>();
}
}
if constexpr (is_glm_vec_v<T> || is_glm_quat_v<T>)
{
if(val.is_array())
{
T vec;
std::vector<typename T::value_type> nums = val.get<std::vector<typename T::value_type>>();
for(size_t i = 0; i < nums.size() && i < T::length(); i++)
{
vec[i] = nums.at(i);
}
return vec;
}
}
}
return fallback;
}
void JsonToVHACD(const nlohmann::json& _json, VHACD::IVHACD::Parameters& params);