mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-10 05:27:01 +03:00
big merge
This commit is contained in:
42
components/spotify/cspot/include/PbCommon.h
Normal file
42
components/spotify/cspot/include/PbCommon.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user