aboutsummaryrefslogtreecommitdiff
path: root/src/defines.h
blob: f55a56f6c8c8cdb3f3c65c1ebadfc4f277b5a500 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Super, Derived, ...)  \
    friend void to_json(nlohmann::json& nlohmann_json_j, const Derived& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<Super>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
    friend void from_json(const nlohmann::json& nlohmann_json_j, Derived& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast<Super&>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } \
    virtual nlohmann::json serialize(void) const override { nlohmann::json ret; to_json(ret, *this); return ret; }

#define NLOHMANN_FRIEND_DECLARES(Type) \
    friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t); \
    friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t); \
    virtual nlohmann::json serialize(void) const { nlohmann::json ret; to_json(ret, *this); return ret; }

#define NLOHMANN_FRIEND_DEFS(Super, Derived, PImpl) \
    void to_json(nlohmann::json& nlohmann_json_j, const Derived& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<Super>(nlohmann_json_t)); nlohmann::to_json(nlohmann_json_j, *nlohmann_json_t.PImpl); } \
    void from_json(const nlohmann::json& nlohmann_json_j, Derived& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast<Super&>(nlohmann_json_t)); nlohmann::from_json(nlohmann_json_j, *nlohmann_json_t.PImpl); }

#define NLOHMANN_FRIEND_DEFS_BASE(Type, PImpl) \
    void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, *nlohmann_json_t.PImpl); } \
    void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, *nlohmann_json_t.PImpl); }