6#include <capnp/message.h>
7#include <capnp/serialize.h>
35 virtual void fromProto(
typename T::Reader reader) = 0;
42 virtual void toProto(
typename T::Builder &builder)
const = 0;
68 kj::ArrayPtr<const capnp::word> words(
reinterpret_cast<const capnp::word *
>(buffer),
69 size /
sizeof(capnp::word));
70 capnp::FlatArrayMessageReader message = capnp::FlatArrayMessageReader(words);
71 typename T::Reader reader = message.getRoot<T>();
83 size_t toBuffer(uint8_t *buffer,
size_t buffer_size)
const
85 capnp::MallocMessageBuilder message;
87 typename T::Builder builder = message.getRoot<T>();
90 kj::Array<capnp::word> words = capnp::messageToFlatArray(message);
91 size_t size = words.size() *
sizeof(capnp::word);
93 if(size > buffer_size)
95 throw std::runtime_error(
"Buffer too small");
98 std::memcpy(buffer, words.begin(), size);
Base template class for Cap'n Proto wrappers.
Definition capnp_wrapper.h:23
virtual void toProto(typename T::Builder &builder) const =0
Write wrapper fields to a Cap'n Proto builder.
virtual ~CapnpWrapper()=default
Virtual destructor for proper cleanup in derived classes.
virtual void debugString(std::ostream &os) const =0
Generate a debug string representation.
size_t toBuffer(uint8_t *buffer, size_t buffer_size) const
Serialize this wrapper to a buffer using Cap'n Proto format.
Definition capnp_wrapper.h:83
virtual void fromProto(typename T::Reader reader)=0
Update wrapper fields from a Cap'n Proto reader.
friend std::ostream & operator<<(std::ostream &os, const CapnpWrapper< T > &wrapper)
Output operator for streaming any derived wrapper class.
Definition capnp_wrapper.h:109
void fromBuffer(const uint8_t *buffer, size_t size)
Update wrapper fields from a serialized message buffer.
Definition capnp_wrapper.h:66