12 catch (
const nlohmann::detail::out_of_range&)
16 catch (
const nlohmann::detail::type_error&)
72 const data::Element& element)
79 data::Element& element)
81 _from_json(j, element);
86 const data::ElementPtr& shapePtr)
88 _to_json(j, *shapePtr);
93 data::ElementPtr& shapePtr)
95 _from_json_ptr(j, shapePtr);
98 ElementJsonSerializers::ElementJsonSerializer&
99 ElementJsonSerializers::getSerializer(
const nlohmann::json& j)
104 ElementJsonSerializers::ElementJsonSerializer&
105 ElementJsonSerializers::getSerializer(
const std::string& demangledTypeName)
107 return _instance._getSerializer(demangledTypeName);
110 std::vector<std::string>
113 return _instance._getRegisteredTypes();
119 return _instance._isTypeRegistered(typeName);
125 return getSerializer(simox::meta::get_type_name(element)).to_json(j, element);
132 if (typeName != simox::meta::get_type_name(element))
136 getSerializer(typeName).from_json(j, element);
145 "data::Element* is null in ElementJsonSerializers::to_json().");
153 getSerializer(j).from_json(j, shapePtr);
162 ElementJsonSerializers::ElementJsonSerializers()
167 ElementJsonSerializers::ElementJsonSerializer&
168 ElementJsonSerializers::_getSerializer(
const std::string& demangledTypeName)
170 if (
auto find = _serializers.find(demangledTypeName); find != _serializers.end())
176 throw error::NoSerializerForType(demangledTypeName);
180 std::vector<std::string>
181 ElementJsonSerializers::_getRegisteredTypes()
const
183 std::vector<std::string> types;
184 for (
const auto& [typeName, serializer] : _serializers)
186 types.push_back(typeName);
192 ElementJsonSerializers::_isTypeRegistered(
const std::string& typeName)
const
194 return _serializers.count(typeName) > 0;