#ifndef MATADOR_RELATION_ENDPOINT_HPP #define MATADOR_RELATION_ENDPOINT_HPP #include "matador/utils/enum_mapper.hpp" #include #include namespace matador::object { class repository_node; enum class relation_type : uint8_t { BELONGS_TO, HAS_ONE, HAS_MANY }; static const utils::enum_mapper relation_type_enum({ { relation_type::BELONGS_TO, "belongs_to" }, { relation_type::HAS_ONE, "has_one" }, { relation_type::HAS_MANY, "has_many" }, }); class relation_endpoint { public: relation_endpoint(std::string field_name, relation_type type, const std::shared_ptr& node); [[nodiscard]] std::string field_name() const; [[nodiscard]] relation_type type() const; [[nodiscard]] std::string type_name() const; [[nodiscard]] const repository_node& node() const; [[nodiscard]] std::shared_ptr node_ptr() const; [[nodiscard]] bool is_has_one() const; [[nodiscard]] bool is_has_many() const; [[nodiscard]] bool is_belongs_to() const; [[nodiscard]] std::shared_ptr foreign_endpoint() const; void link_foreign_endpoint(const std::shared_ptr& endpoint); private: template friend class relation_completer; std::string field_name_; relation_type type_; std::shared_ptr node_; std::shared_ptr foreign_endpoint_; }; } #endif //MATADOR_RELATION_ENDPOINT_HPP