在 Thrift IDL 中,如何说客户端应该在结构中包含一组字段中的一个?

2023-11-24

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

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

这意味着客户端可以提供没有字段、名称、大小或名称和大小的 Thing 对象。但是如果我想要一个 Thing 对象怎么办?either a name or尺寸(异或)?目前,我必须使用我的实现代码来防止客户端提供没有字段或两个字段的事物;还记录/注释客户端应如何指定 Thing 对象。

简而言之,如果有人定义了一个包含各种字段的结构体,是否可以在IDL本身中表达您只想正好一个客户端需要提供哪些字段? (我使用的是 Apache Thrift 0.9.0。)如果您能说出类似以下内容(| = 或),那就太好了:

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

使用工会:

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

可选可以省略,必需不允许/对联合有用。

联合已在 0.9.0 (IIRC) 中引入,但 0.9.1 改进了对联合的支持。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Thrift IDL 中,如何说客户端应该在结构中包含一组字段中的一个? 的相关文章

随机推荐