#ifndef SHADOW_SCHEMA_HPP #define SHADOW_SCHEMA_HPP #include "matador/utils/result.hpp" #include "matador/utils/error.hpp" #include #include namespace matador::object { class schema; class schema_node; } namespace matador::object::internal { class shadow_schema { private: using node_ptr = std::shared_ptr; public: explicit shadow_schema(object::schema& s); [[nodiscard]] object::schema& schema() const; [[nodiscard]] bool schema_contains(const std::type_index& ti) const; [[nodiscard]] utils::result find_node(const std::type_index &type_index) const; [[nodiscard]] utils::result find_node(const std::string &name) const; [[nodiscard]] utils::result attach_node(const std::shared_ptr &node) const; [[nodiscard]] utils::result detach_node(const std::shared_ptr &node) const; private: object::schema& schema_; }; } #endif //SHADOW_SCHEMA_HPP