| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A modern, header-only C++ library for MessagePack serialization and deserialization.
msgpack23 is a lightweight library that provides a straightforward approach to serializing and deserializing C++ data structures into the MessagePack format. It is written in modern C++ (targeting C++20 and beyond) and leverages templates and type traits to provide a flexible, zero-dependency solution for packing and unpacking various data types.
Clone the Repository
git clone https://github.com/rwindegger/msgpack23.gitInclude the Header
Since this is a header-only library, just include the main header in your project:
#include "msgpack23.h"Pack and Unpack
#include <iostream>
#include <map>
#include "msgpack23.hpp"
int main() {
// Create a map of some data
std::map<std::string, int> original {{"apple", 1}, {"banana", 2}};
// 1) Pack into a vector of std::byte
std::vector<std::byte> packedData{};
auto const inserter = std::back_insert_iterator(packedData);
msgpack23::Packer packer{inserter};
packer(original);
// 2) Unpack back into a map
std::map<std::string, int> unpacked;
msgpack23::Unpacker unpacker(packedData);
unpacker(unpacked);
// Verify the result
for (auto const& [key, value] : unpacked) {
std::cout << key << ": " << value << "\n";
}
return 0;
}To serialize your own types, define a pack and unpack function. The pack should accept a T & and the unpack should accept a T &.
struct MyData {
int64_t my_integer;
std::string my_string;
template<typename T>
void pack(T &packer) const {
packer(my_integer, my_string);
}
template<typename T>
void unpack(T &unpacker) {
unpacker(my_integer, my_string);
}
};Now you can use MyData with msgpack23 just like any built-in type:
MyData const my_data {42, "Hello" };
std::vector<std::byte> data{};
auto const inserter = std::back_insert_iterator(data);
msgpack23::pack(my_data);
auto obj = msgpack23::unpack<MyData>(data);Contributions, bug reports, and feature requests are welcome! Feel free to open an issue or submit a pull request.
This project is licensed under the MIT License.
Happy packing (and unpacking)! If you have any questions or feedback, please open an issue or start a discussion.
| Back | FazBrowse Home | New Git URL |