https://github.com/capnproto/capnproto/pull/1016 Wasn't that difficult ;)
~John On Thursday, June 18, 2020 at 7:54:02 PM UTC-7, John Demme wrote: > > Yeah, I thought of that but it was too ugly. Also, I had some C# code > which worked on a CodeGenRequest lying around from an abandoned version of > this. There was another reason as well, though I don't remember it now... > > If that method existed, I'd use it ;) > > ~John > > On Thu, Jun 18, 2020 at 6:40 PM 'Kenton Varda' via Cap'n Proto < > [email protected] <javascript:>> wrote: > >> `schema.getProto().getNestedNodes()` returns a list of >> `capnp::schema::Node::NestedNode`, which has `name` and `id` fields. So >> that gives you the names of the nested declarations, which you can get plug >> into `getNested()`. >> >> It's a little ugly, but in general, the C++ schema classes only have >> methods for things that aren't already easy to get from the underlying >> capnp struct. >> >> That said, I could be convinced that a `getAllNested()` that returns some >> sort of iterable would be worthwhile here. >> >> -Kenton >> >> On Thu, Jun 18, 2020 at 8:25 PM John Demme <[email protected] >> <javascript:>> wrote: >> >>> Hi Kenton- >>> >>> I only see: >>> >>>> ParsedSchema getNested(kj::StringPtr name) const; >>>> // Gets the nested node with the given name, or throws an exception >>>> if there is no such nested >>>> // declaration. >>>> >>> >>> If there were a getNested() which returned a list of ParsedSchemas >>> that'd probably be sufficient. Knowing what file housed a particular node >>> would be nice, but not strictly necessary. >>> >>> I'm writing software which takes in a capnp schema along with a bunch of >>> other stuff. It's basically a message passing compiler which can #include >>> capnp schemas to use for message schemas. Only there's no language >>> associated with it, so a source-to-source translator (codegen) doesn't >>> apply. >>> >>> ~John >>> >>> On Thu, Jun 18, 2020 at 4:59 PM Kenton Varda <[email protected] >>> <javascript:>> wrote: >>> >>>> Hi John, >>>> >>>> `capnp::SchemaParser` will parse capnp files and give you a >>>> `capnp::ParsedSchema`, which is like `capnp::Schema` but also has the >>>> `getNested()` method which allows you to traverse the whole tree of child >>>> nodes. So it's not just the root node. >>>> >>>> That said, it's true that it's not super-convenient to construct a >>>> `CodeGeneratorRequest` from this. You would need to traverse the tree and >>>> flatten it into a list, which is easy enough, but filling in >>>> `requestedFiles` (especially `imports`) might be tricky. >>>> >>>> Out of curiosity, why do you need to construct a `CodeGeneratorRequest`? >>>> >>>> -Kenton >>>> >>>> On Thu, Jun 18, 2020 at 6:15 PM John Demme <[email protected] >>>> <javascript:>> wrote: >>>> >>>>> Hello all- >>>>> >>>>> I've spent a lot of time digging around the CapnProto C++ code base, >>>>> but I can't figure how to point a function to a textual capnp schema and >>>>> get out the CodeGenRequest. Parsing to a capnp::Schema is not sufficient >>>>> as >>>>> that class only represents the root node with (AFAICT) no way to access >>>>> the >>>>> other nodes and other information in the CodeGenRequest. I saw there was >>>>> infrastructure to do this in the compiler, but those header files aren't >>>>> distributed with the library code. >>>>> >>>>> ~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] <javascript:>. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/capnproto/d23c4480-ab9a-4b77-9a5d-02535698bc01o%40googlegroups.com >>>>> >>>>> <https://groups.google.com/d/msgid/capnproto/d23c4480-ab9a-4b77-9a5d-02535698bc01o%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- >> 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] <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/capnproto/CAJouXQm5N5JwpyLN8MkUCcWRo4yfzouYdfhwEJN4mToER8D%3DwA%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/capnproto/CAJouXQm5N5JwpyLN8MkUCcWRo4yfzouYdfhwEJN4mToER8D%3DwA%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- 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/cf80853c-5421-4d76-9627-5043c54d00dao%40googlegroups.com.
