#include "./buildactiontemplate.h" #include #include "reflection/buildactiontemplate.h" using namespace std; using namespace CppUtilities; namespace LibRepoMgr { } // namespace LibRepoMgr namespace ReflectiveRapidJSON { namespace JsonReflector { template <> LIBREPOMGR_EXPORT void push( const LibRepoMgr::BuildActionSequence &reflectable, RAPIDJSON_NAMESPACE::Value &value, RAPIDJSON_NAMESPACE::Document::AllocatorType &allocator) { if (reflectable.name.empty() && !reflectable.concurrent) { push(reflectable.actions, value, allocator); } else { push(static_cast(reflectable), value, allocator); push(static_cast(reflectable), value, allocator); } } template <> LIBREPOMGR_EXPORT void pull(LibRepoMgr::BuildActionSequence &reflectable, const RAPIDJSON_NAMESPACE::GenericValue> &value, JsonDeserializationErrors *errors) { if (value.IsArray()) { reflectable.name.clear(); reflectable.concurrent = false; pull(reflectable.actions, value, errors); } else if (value.IsObject()) { pull(static_cast(reflectable), value, errors); pull(static_cast(reflectable), value, errors); } else if (errors) { errors->reportTypeMismatch(value.GetType()); } } template <> LIBREPOMGR_EXPORT void push(const LibRepoMgr::BuildActionSequenceNode &reflectable, RAPIDJSON_NAMESPACE::Value &value, RAPIDJSON_NAMESPACE::Document::AllocatorType &allocator) { if (const auto *const name = std::get_if(&reflectable)) { push(*name, value, allocator); } else if (const auto *const sequence = std::get_if(&reflectable)) { push(*sequence, value, allocator); } } template <> LIBREPOMGR_EXPORT void pull(LibRepoMgr::BuildActionSequenceNode &reflectable, const RAPIDJSON_NAMESPACE::GenericValue> &value, JsonDeserializationErrors *errors) { if (value.IsString()) { auto &name = reflectable.emplace(); pull(name, value, errors); } else { auto &sequence = reflectable.emplace(); pull(sequence, value, errors); } } } // namespace JsonReflector } // namespace ReflectiveRapidJSON