capnpc-rust icon indicating copy to clipboard operation
capnpc-rust copied to clipboard

Trying to return a union - Help needed

Open asafyish opened this issue 6 years ago • 1 comments

Hi,

I have this schema:

struct Square {
  width @0 :Int64;
  height @1 :Text;
}

struct Circle {
  radius @0 :Int64;
}

struct Shape {
   union {
    square @0 :Square;
    circle @1 :Circle;
  }
}

I am trying to write a function that returns a mutable square or circle but don't want the caller to know about shape (not even sure it's possible in rust, because of ownership).

I tried:

pub fn get_square() -> ?? {
    let mut message = capnp::message::Builder::new_default();
    let mut message2 = capnp::message::Builder::new_default();
    let mut shape = message2.init_root::<Shape::Builder>();
    {
        let square = message.init_root::<Square::Builder>();
        shape.set_square(square.borrow_as_reader());
    }
   // How to return square ?? Is it possible ?
}

What I am trying to achieve is, having a module that expose several functions that let me create a square or circle, but without knowing about the internal parts of capnp.

asafyish avatar Feb 13 '18 07:02 asafyish