static Generic fromGenericAttribute(const GenericAttribute * attr) { { auto boolAttr = dynamic_cast<const BoolAttribute *>(attr); if(boolAttr != nullptr) { return Generic(boolAttr->get()); } } { auto numberAttr = dynamic_cast<const _NumberAttribute<float> *>(attr); if(numberAttr != nullptr) { return Generic(numberAttr->get()); } } { auto stringAttr = dynamic_cast<const _StringAttribute<std::string> *>(attr); if(stringAttr != nullptr) { return Generic(stringAttr->get()); } } { auto listAttr = dynamic_cast<const GenericAttributeList *>(attr); if(listAttr != nullptr) { GenericArray genericArray; genericArray.reserve(listAttr->size()); for(const auto & element : *listAttr) { genericArray.emplace_back(fromGenericAttribute(element.get())); } return Generic(std::move(genericArray)); } } { auto mapAttr = dynamic_cast<const GenericAttributeMap *>(attr); if(mapAttr != nullptr) { GenericMap genericMap; genericMap.reserve(mapAttr->size()); for(const auto & element : *mapAttr) { genericMap.emplace(element.first, fromGenericAttribute(element.second.get())); } return Generic(std::move(genericMap)); } } return Generic(); }