#ifndef PRIMARY_KEY_RESOLVER_HPP #define PRIMARY_KEY_RESOLVER_HPP #include "matador/utils/access.hpp" #include "matador/utils/field_attributes.hpp" #include "matador/utils/foreign_attributes.hpp" #include "matador/utils/identifier.hpp" #include #include #include namespace matador::object { struct primary_key_info { std::string column_name; utils::identifier pk; }; class primary_key_resolver final { public: template primary_key_info resolve() { Type obj; return resolve(obj); } template primary_key_info resolve(const Type& obj) { access::process(*this, obj); return primary_key_info_; } template < class Type > void on_primary_key(const char *id, Type &pk, std::enable_if_t && !std::is_same_v>* = nullptr) { primary_key_info_.column_name = id; primary_key_info_.pk = pk; } void on_primary_key(const char *id, const std::string &pk, size_t size); void on_revision(const char * /*id*/, uint64_t &/*rev*/) {} template void on_attribute(const char * /*id*/, Type &/*val*/, const utils::field_attributes &/*attr*/ = utils::null_attributes) {} template void on_belongs_to(const char * /*id*/, Pointer &/*val*/, const utils::foreign_attributes &/*attr*/) {} template void on_has_one(const char * /*id*/, Pointer &/*val*/, const utils::foreign_attributes &/*attr*/) {} template void on_has_many(const char * /*id*/, ContainerType &/*col*/, const char *, const utils::foreign_attributes &/*attr*/) {} template void on_has_many_to_many(const char * /*id*/, ContainerType &/*col*/, const char * /*join_column*/, const char * /*inverse_join_column*/, const utils::foreign_attributes &/*attr*/) {} template void on_has_many_to_many(const char * /*id*/, ContainerType &/*col*/, const utils::foreign_attributes &/*attr*/) {} private: primary_key_info primary_key_info_{}; }; } #endif //PRIMARY_KEY_RESOLVER_HPP