#pragma once #include #include #include #include namespace Metadata { struct TypeId { size_t id; }; struct TypeInfo; struct TypePropertyInfo { std::string_view name; const TypeInfo* type; std::string_view getterName; std::string_view setterName; bool IsDirectAccess() const; }; struct TypeMethodInfo { std::string_view name; // TODO }; struct TypeInfo { TypeId typeId; std::string_view name; std::span parents; std::span properties; std::span methods; /// Whether this object is registered at runtime or statically compiled bool dynamic = false; }; // NOTE: implemented by generating specializations; not-generated ones should generated an error in the linking phase template const TypeInfo* GetTypeInfo(); // NOTE: implemented by generating specializations template std::string_view EnumToString(TEnum value) = delete; // NOTE: implemented by generating specializations template std::optional EnumFromString(std::string_view str) = delete; } // namespace Metadata