123456789101112131415161718192021222324252627282930313233343536373839404142 |
- #ifndef PBCOMMON_H
- #define PBCOMMON_H
- #include <cstdint>
- #include <PbWriter.h>
- #include <optional>
- #include <PbReader.h>
- class BaseProtobufMessage
- {
- private:
- public:
- bool firstField = true;
- uint32_t lastMessagePosition;
- void parseFromVector(std::vector<uint8_t> const &rawData)
- {
- auto reader = std::make_shared<PbReader>(rawData);
- parseWithReader(reader);
- }
- void encodeToVector(std::vector<uint8_t> &rawData)
- {
- auto writer = std::make_shared<PbWriter>(rawData);
- encodeWithWriter(writer);
- }
- void parseWithReader(std::shared_ptr<PbReader> reader)
- {
- firstField = true;
- while (reader->next())
- {
- if (!decodeField(reader))
- {
- reader->skip();
- } else {
- firstField = false;
- }
- }
- }
- virtual void encodeWithWriter(std::shared_ptr<PbWriter> writer) = 0;
- virtual bool decodeField(std::shared_ptr<PbReader> reader) = 0;
- };
- #endif
|