如何使用循环引用从Thrift IDL生成正常运行的Ruby客户端?

时间:2016-02-10 22:57:35

标签: ruby thrift idl

我的Thrift IDL有一个循环引用,但在Java中运行没有问题(作为服务器和客户端)。生成的代码在Ruby中不起作用,尽管我们发现如果每个类被分成一个单独的文件并且它可以工作,它将会起作用。在别人需要。我想在Thrift IDL中模仿这个文件结构但是(除了组织性更差)它失败了,因为Thrift编译器对分辨率本身非常天真(我相信它遵循包括后退和前后,陷入无限循环)在编译时)。

除了手动编辑/后处理生成的Ruby客户端之外,还有办法解决这个问题吗?

我找到了一张Jira机票,要求支持这个,但它已经老了,它一定是被遗忘了。 https://issues.apache.org/jira/browse/THRIFT-476

(我也知道他们最近为命名空间添加了一个编译器选项,但我认为这不会有助于缓解这个问题吗?我不是一个很重要的Ruby-ist ...... https://issues.apache.org/jira/browse/THRIFT-2574)< / p>

IDL与此类似,但我们正在转换为&#34; union&#34;对于容器...如果你有一个更好的多态性解决方案,也会喜欢听到它。 :)

struct Collection {
  1: list<CollectionElement> collection_elements;
}

struct CollectionElement {
   1: PolymorphContainer x;
   2: i32 quantity;
}

struct PolymorphContainer {
    1: Type1 x;
    2: Type2 y;
    3: Collection z;
}

0 个答案:

没有答案