mirror of
https://github.com/capnproto/pycapnp.git
synced 2025-03-04 08:24:43 +01:00

Cap'n Proto provides a schema loader, which can be used to dynamically load schemas during runtime. To port this functionality to pycapnp, a new class is provided `C_SchemaLoader`, which exposes the Cap'n Proto C++ interface, and `SchemaLoader`, which is part of the pycapnp library. The specific use case for this is when a capnp message contains a Node.Reader: The schema for a yet unseen message can be loaded dynamically, allowing the future message to be properly processed. If the message is a struct containing other structs, all the schemas for every struct must be loaded to correctly parse the message. See https://github.com/DaneSlattery/capnp_generic_poc for a proof-of-concept. Add docs and cleanup Add more docs Reduce changes Fix flake8 formatting Fix get datatype
14 lines
448 B
C
14 lines
448 B
C
#pragma once
|
|
|
|
#include "kj/io.h"
|
|
#include "capnp/dynamic.h"
|
|
#include "capnp/serialize-packed.h"
|
|
|
|
kj::Array< ::capnp::byte> messageToPackedBytes(capnp::MessageBuilder & message, size_t wordCount)
|
|
{
|
|
|
|
kj::Array<capnp::byte> result = kj::heapArray<capnp::byte>(wordCount * 8);
|
|
kj::ArrayOutputStream out(result.asPtr());
|
|
capnp::writePackedMessage(out, message);
|
|
return heapArray(out.getArray()); // TODO: make this non-copying somehow
|
|
}
|