How do you say在Thrift IDL中,客户端应该只包含结构中的一组字段之一?

时间:2013-09-20 18:05:58

标签: thrift

假设我在Apache Thrift IDL文件中定义了一个包含两个字段的结构。例如:

struct Thing {
  1: optional string name,
  2: optional i32 size
}

这意味着客户端可以提供没有字段,名称,大小或名称和大小的Thing对象。但是,如果我想要一个Thing对象 一个名称一个大小(独占或)?目前,我必须使用我的实现代码来防止客户端提供没有字段或两个字段的Thing;并记录/评论客户应如何指定Thing对象。

简而言之,如果某人定义了包含各种字段的结构,是否可以在IDL本身中表达,您只需提供这些字段中的一个在客户? (我正在使用Apache Thrift 0.9.0。)如果您能说出以下内容(| =或),那将会很棒:

struct Thing {
  1: required (string name | i32 size)
}

1 个答案:

答案 0 :(得分:7)

使用工会:

union Thing {
  1: string name,
  2: i32 size
}

可以省略可选项,对于联合不允许/不需要。

0.9.0(IIRC)已经引入了工会,但0.9.1已经改进了对它们的支持。