#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 { BelongsTo, HasOne, HasMany }; static const utils::enum_mapper relation_type_enum({ { relation_type::BelongsTo, "belongs_to" }, { relation_type::HasOne, "has_one" }, { relation_type::HasMany, "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; template friend class foreign_node_completer; std::string field_name_; relation_type type_; std::shared_ptr node_; std::shared_ptr foreign_endpoint_; }; } #endif //MATADOR_RELATION_ENDPOINT_HPP