I've been playing with this a bit and the closest I've been able to get is 
constructing a new message with the AnyPointer at the root. That, however, 
prepends a struct pointer to the whole thing. I can just chop it off, but 
I'm thinking there must be a better way.

    auto msg = context.getParams().getMsg(); // AnyPointer
    MallocMessageBuilder messageBuilder;
    messageBuilder.setRoot(msg);
    auto flatWordsArray = messageToFlatArray(messageBuilder);
    auto byteArray = flatWordsArray.asBytes();


~John


On Thursday, May 14, 2020 at 11:30:38 PM UTC-7, John Demme wrote:
>
> Hi-
>
> In the C++ API, is there an (easy) way to get the binary encoded message 
> of an AnyPointer field? Or a generic field? (If I understand, they're 
> encoded the same under the hood.) I don't think anyPointer->getAs<Data>() 
> would work, would it?
>
> The background here is that I'm trying to write a generic proxy for 
> CapnProto messages using CapnProto RPC. Since I'm not re-compiling the 
> proxy itself, it cannot know the possible types for AnyPointer. Since 
> messages don't need any schema data to be traversed (though not 
> interpreted) correctly, this *should *be possible.
>
> To be more concrete:
> interface ProxyChannel {
>     send @0 (msg :AnyPointer);
>     recv @1 () -> (respMsg :AnyPointer);
> }
>
> I'm using :Data instead of :AnyPointer now, but that puts a unnecessary 
> burden on the clients.
>
> ~John
>

-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/capnproto/7f1b3509-0bac-4854-8256-d85a718031d7%40googlegroups.com.

Reply via email to