#include #include #include #include #include #include namespace MyTypes { //define data enum Color:uint8_t { Red, Green, Blue }; struct Vec3 { float x, y, z; }; struct Weapon { std::string name; int16_t damage; }; struct Monster { Vec3 pos; int16_t mana; int16_t hp; std::string name; std::vector inventory; Color color; std::vector weapons; Weapon equipped; std::vector path; }; template void serialize(S& s, Vec3& o) { s.value4b(o.x); s.value4b(o.y); s.value4b(o.z); } //define serialization functions template void serialize (S& s, Weapon& o) { //forward/backward compatibility for monsters s.ext(o, bitsery::ext::Growable{}, [&s](Weapon& o1) { s.text1b(o1.name, 20); s.value2b(o1.damage); }); } template void serialize (S& s, Monster& o) { //forward/backward compatibility for monsters s.ext(o, bitsery::ext::Growable{}, [&s](Monster& o1) { s.value1b(o1.color); s.value2b(o1.mana); s.value2b(o1.hp); s.object(o1.equipped); s.object(o1.pos); s.container(o1.path, 1000); s.container(o1.weapons, 100); s.container1b(o1.inventory, 50); s.text1b(o1.name, 20); }); } } using namespace bitsery; using Buffer = std::array; using OutputAdapter = OutputBufferAdapter; using InputAdapter = InputBufferAdapter; struct SessionsEnabled:public DefaultConfig { static constexpr bool BufferSessionsEnabled = true; }; int main() { //set some random data MyTypes::Monster data{}; data.name = "lew"; //1) create buffer to store data Buffer buffer{}; auto writtenSize = startSerialization(buffer, data); //deserialize same object, can also be invoked like this: serialize(des, data) MyTypes::Monster res{}; auto state = startDeserialization(InputAdapter{buffer.begin(), writtenSize}, res); assert(state.first == ReaderError::NO_ERROR && state.second); }