/* * Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved. */ #pragma once #include #include #include "typeconv.hpp" namespace keel { using TypeDescGenerator = ox::Error(*)(ox::TypeStore&); template ox::Error generateTypeDesc(ox::TypeStore &ts) noexcept { return ox::buildTypeDef(&ts).error; } class Module { public: constexpr Module() noexcept = default; Module(Module const&) noexcept = delete; Module(Module&&) noexcept = delete; Module &operator=(Module const&) noexcept = delete; Module &operator=(Module&&) noexcept = delete; constexpr virtual ~Module() noexcept = default; [[nodiscard]] virtual ox::String id() const noexcept = 0; [[nodiscard]] virtual ox::Vector types() const noexcept; [[nodiscard]] virtual ox::Vector converters() const noexcept; [[nodiscard]] virtual ox::Vector packTransforms() const noexcept; }; void registerModule(const Module *mod) noexcept; [[nodiscard]] const ox::Vector &modules() noexcept; }