query/include/matador/object/relation_endpoint.hpp

56 lines
1.7 KiB
C++

#ifndef MATADOR_RELATION_ENDPOINT_HPP
#define MATADOR_RELATION_ENDPOINT_HPP
#include "matador/utils/enum_mapper.hpp"
#include <cstdint>
#include <memory>
namespace matador::object {
class schema_node;
enum class relation_type : uint8_t {
BELONGS_TO,
HAS_ONE,
HAS_MANY
};
static const utils::enum_mapper<relation_type> 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<schema_node>& node);
[[nodiscard]] std::string field_name() const;
[[nodiscard]] relation_type type() const;
[[nodiscard]] std::string type_name() const;
[[nodiscard]] const schema_node& node() const;
[[nodiscard]] std::shared_ptr<schema_node> 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<relation_endpoint> foreign_endpoint() const;
void link_foreign_endpoint(const std::shared_ptr<relation_endpoint>& endpoint);
private:
template<typename Type>
friend class relation_completer;
std::string field_name_;
relation_type type_;
std::shared_ptr<schema_node> node_;
std::shared_ptr<relation_endpoint> foreign_endpoint_;
};
}
#endif //MATADOR_RELATION_ENDPOINT_HPP