#pragma once #include #include #include #include #include #include "yunq/yunq.h" namespace yunq { class MessageView { public: MessageView(const glcr::ByteBuffer& buffer, uint64_t offset) : buffer_(buffer), offset_(offset) {} [[nodiscard]] glcr::Status CheckHeader() const; // TODO: Implement glcr::StatusOr template glcr::ErrorOr ReadField(uint64_t field_index) const; template glcr::ErrorOr> ReadRepeated(uint64_t field_index) const; glcr::ErrorOr ReadCapability(uint64_t field_index) const; glcr::ErrorOr ReadCapability(uint64_t field_index, const glcr::CapBuffer& caps) const; private: const glcr::ByteBuffer& buffer_; uint64_t offset_; uint64_t field_offset(uint64_t field_index) const { return offset_ + kHeaderSize + (8 * field_index); } }; template <> glcr::ErrorOr MessageView::ReadField( uint64_t field_index) const; template <> glcr::ErrorOr MessageView::ReadField( uint64_t field_index) const; template <> glcr::ErrorOr> MessageView::ReadRepeated( uint64_t field_index) const; } // namespace yunq