mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.2 KiB
C++
36 lines
1.2 KiB
C++
#ifndef COMPONENTS_LUA_SERIALIZATION_H
|
|
#define COMPONENTS_LUA_SERIALIZATION_H
|
|
|
|
#include <sol/sol.hpp>
|
|
|
|
namespace LuaUtil
|
|
{
|
|
|
|
// Note: it can contain \0
|
|
using BinaryData = std::string;
|
|
|
|
class UserdataSerializer
|
|
{
|
|
public:
|
|
virtual ~UserdataSerializer() {}
|
|
|
|
// Appends serialized sol::userdata to the end of BinaryData.
|
|
// Returns false if this type of userdata is not supported by this serializer.
|
|
virtual bool serialize(BinaryData&, const sol::userdata&) const = 0;
|
|
|
|
// Deserializes userdata of type "typeName" from binaryData. Should push the result on stack using sol::stack::push.
|
|
// Returns false if this type is not supported by this serializer.
|
|
virtual bool deserialize(std::string_view typeName, std::string_view binaryData, lua_State*) const = 0;
|
|
|
|
protected:
|
|
static void append(BinaryData&, std::string_view typeName, const void* data, size_t dataSize);
|
|
};
|
|
|
|
BinaryData serialize(const sol::object&, const UserdataSerializer* customSerializer = nullptr);
|
|
sol::object deserialize(lua_State* lua, std::string_view binaryData,
|
|
const UserdataSerializer* customSerializer = nullptr, bool readOnly = false);
|
|
|
|
}
|
|
|
|
#endif // COMPONENTS_LUA_SERIALIZATION_H
|