#ifndef PROTOBUF_H #define PROTOBUF_H #include #include #include "protobuf.h" #include #include std::optional findFieldWithProtobufTag(AnyRef ref, uint32_t tag); void decodeField(std::shared_ptr reader, AnyRef any); void decodeProtobuf(std::shared_ptr reader, AnyRef any); void encodeProtobuf(std::shared_ptr writer, AnyRef any, uint32_t protobufTag = 0); template std::vector encodePb(T & data) { auto ref = AnyRef::of(&data); std::vector rawData;; auto writer = std::make_shared(rawData); encodeProtobuf(writer, ref); return rawData; } template T decodePb(std::vector & bytes) { T data = {}; auto ref = AnyRef::of(&data); auto writer = std::make_shared(bytes); decodeProtobuf(writer, ref); return data; } #endif