Skip to content
Snippets Groups Projects
Commit 90f62b13 authored by Philip Scherer's avatar Philip Scherer
Browse files

Fix easy JSON exporter for untyped data exports

parent ace30516
No related branches found
No related tags found
1 merge request!221Resolve "Fix easy JSON export with untyped data"
......@@ -4,10 +4,10 @@
#include <ArmarXCore/core/logging/Logging.h>
#include <RobotAPI/libraries/aron/core/data/variant/All.h>
#include <RobotAPI/libraries/aron/core/Exception.h>
#include <RobotAPI/libraries/armem/core/Time.h>
#include <RobotAPI/libraries/aron/converter/eigen/EigenConverter.h>
#include <RobotAPI/libraries/aron/core/Exception.h>
#include <RobotAPI/libraries/aron/core/data/variant/All.h>
namespace armarx::armem::gui::instance
{
......@@ -27,6 +27,34 @@ namespace armarx::armem::gui::instance
return obj;
}
/* We override this method because we need to handle untyped members in the hierarchy.
* The other get*Elements() methods will either not be called with a null type or can handle it.
*/
TreeTypedJSONConverter::MapElements
TreeTypedJSONConverter::getObjectElements(DataInput& elementData, TypeInput& elementType)
{
std::map<std::string, std::pair<aron::data::VariantPtr, aron::type::VariantPtr>> ret;
auto data = aron::data::Dict::DynamicCastAndCheck(elementData);
auto type = aron::type::Object::DynamicCastAndCheck(elementType);
if (data)
{
for (const auto& [key, e] : data->getElements())
{
if (type && type->hasMemberType(key))
{
auto memberType = type->getMemberType(key);
ret.insert({key, {e, memberType}});
}
else
{
ret.insert({key, {e, nullptr}});
}
}
}
return ret;
}
void
TreeTypedJSONConverter::visitObjectOnEnter(DataInput& elementData, TypeInput& /*elementType*/)
{
......
......@@ -17,6 +17,8 @@ namespace armarx::armem::gui::instance
const nlohmann::json& getJSON();
MapElements getObjectElements(DataInput& elementData, TypeInput& elementType) override;
void visitObjectOnEnter(DataInput& elementData, TypeInput& elementType) override;
void visitObjectOnExit(DataInput& elementData, TypeInput& elementType) override;
void visitDictOnEnter(DataInput& elementData, TypeInput& elementType) override;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment