#ifndef JOIN_COLUMNS_COLLECTOR_HPP #define JOIN_COLUMNS_COLLECTOR_HPP #include "matador/utils/access.hpp" #include "matador/utils/field_attributes.hpp" #include namespace matador::object { struct join_columns { std::string join_column; std::string inverse_join_column; }; class join_columns_collector final { public: template join_columns collect() { join_columns_ = {}; Type obj; access::process(*this, obj); return join_columns_; } template < class V > void on_primary_key(const char * /*id*/, V &, std::enable_if_t && !std::is_same_v>* = nullptr) {} static void on_primary_key(const char * /*id*/, std::string &, size_t) {} static void on_revision(const char * /*id*/, unsigned long long &/*rev*/) {} template static void on_attribute(const char * /*id*/, Type &, const utils::field_attributes &/*attr*/ = utils::null_attributes) {} template static void on_belongs_to(const char * /*id*/, Pointer &obj, const utils::foreign_attributes &attr) {} template static void on_has_one(const char * /*id*/, Pointer &obj, const utils::foreign_attributes &attr) {} template static void on_has_many(ContainerType &, const char *join_column, const utils::foreign_attributes &attr) {} template void on_has_many_to_many(const char * /*id*/, ContainerType &/*c*/, const char *join_column, const char *inverse_join_column, const utils::foreign_attributes &/*attr*/) { join_columns_.join_column = join_column; join_columns_.inverse_join_column = inverse_join_column; } template static void on_has_many_to_many(const char * /*id*/, ContainerType &/*c*/, const utils::foreign_attributes &/*attr*/) {} private: join_columns join_columns_; }; } #endif //JOIN_COLUMNS_COLLECTOR_HPP