func (c *Conn) descriptorForClient(desc rpccapnp.CapDescriptor, client capnp.Client) error { client = extractRPCClient(client) if ic, ok := client.(*importClient); ok && isImportFromConn(ic, c) { desc.SetReceiverHosted(uint32(ic.id)) return nil } if pc, ok := client.(*capnp.PipelineClient); ok { p := (*capnp.Pipeline)(pc) if q, ok := p.Answer().(*question); ok && isQuestionFromConn(q, c) { a, err := desc.NewReceiverAnswer() if err != nil { return err } a.SetQuestionId(uint32(q.id)) err = transformToPromisedAnswer(desc.Segment(), a, p.Transform()) if err != nil { return err } return nil } } id := c.exports.add(client) desc.SetSenderHosted(uint32(id)) return nil }