是否可以在 Thrift 结构中为联合、嵌套结构和容器定义默认值?

Is it possible to define default values for union, nested struct and containers in Thrift struct?

我有一个 thrift 结构,它有许多不同类型的字段。其中一些可能有也可能没有默认值。

问题是如何在 .thrift 文件中定义默认值?

enum E {
  A = 1,
  B = 2,
  C = 3
}

struct Nested {
  1: i64 f1,
  2: required string f2,
  3: optional E f3 = E.B
}

union Union {
  1: string f1;
  2: string f2;
}


struct TestStruct {
  1: optional E f1 = E.A,
  2: required i64 f2 = 1,
  3: required string f3 = "f3",
  4: Nested f4,
  5: Union f5,
  6: map<string, i64> f6,
  7: set<i64> f7,
  8: list<string> f8
}

考虑到这个例子,是否可以为字段 f4-f8 定义默认值?

我假设这是不可能的,但是thrift docs没有直接说。

ConstantsDemo.thrift 文件提供了一些示例,例如:

struct thing {
  1: i32 hello,
  2: i32 goodbye
}
const map<string,i32> GEN_MAP2 = { "hello" : 233, "lkj98d" : 853, 'lkjsdf' : 098325 }

所以解决方案可能如下所示:

struct TestStruct {
  1: optional E f1 = E.A,
  2: required i64 f2 = 1,
  3: required string f3 = "f3",
  4: Nested f4 = { f1 : 24, f2 : "i am required", f3 : E.B }
  5: Union f5 = { f1 : "one" }
  6: map<string, i64> f6 = { "hello": 42, "goodbye":24 },
  7: set<i64> f7 = [ 1, 2, 3, -4 ]
  8: list<string> f8 = ["bla","bla","bla"]
}

请注意 set<>list<>(括号)的语法不同于 map<>(大括号)。

虽然我在 4 和 5 上遇到了一个奇怪的错误...不确定那是不是 bug