1#ifndef REFLECTIVE_RAPIDJSON_JSON_REFLECTOR_BOOST_HANA_H
2#define REFLECTIVE_RAPIDJSON_JSON_REFLECTOR_BOOST_HANA_H
17#include <boost/hana/adapt_struct.hpp>
18#include <boost/hana/at_key.hpp>
19#include <boost/hana/define_struct.hpp>
20#include <boost/hana/for_each.hpp>
21#include <boost/hana/intersection.hpp>
22#include <boost/hana/keys.hpp>
25namespace JsonReflector {
29template <
typename Type, Traits::DisableIf<IsBuiltInType<Type>> *>
30void push(
const Type &reflectable, RAPIDJSON_NAMESPACE::Value::Object &value, RAPIDJSON_NAMESPACE::Document::AllocatorType &allocator)
32 boost::hana::for_each(boost::hana::keys(reflectable), [&reflectable, &value, &allocator](
auto key) {
33 push(boost::hana::at_key(reflectable, key), boost::hana::to<char const *>(key), value, allocator);
39template <
typename Type, Traits::DisableIf<IsBuiltInType<Type>> *>
40void pull(Type &reflectable,
const RAPIDJSON_NAMESPACE::GenericValue<RAPIDJSON_NAMESPACE::UTF8<char>>::ConstObject &value,
43 boost::hana::for_each(boost::hana::keys(reflectable), [&reflectable, &value, &errors](
auto key) {
44 pull(boost::hana::at_key(reflectable, key), boost::hana::to<char const *>(key), value, errors);
Contains functions to (de)serialize basic types such as int, double, bool, std::string,...
void pull(Type &reflectable, const RAPIDJSON_NAMESPACE::GenericValue< RAPIDJSON_NAMESPACE::UTF8< char > >::ConstObject &value, JsonDeserializationErrors *errors)
Pulls the reflectable which has a custom type from the specified object.
void push(const Type &reflectable, RAPIDJSON_NAMESPACE::Value &value, RAPIDJSON_NAMESPACE::Document::AllocatorType &allocator)
Pushes the specified reflectable to the specified value.
The JsonDeserializationErrors struct can be passed to fromJson() for error handling.