[英]Is there a way to use a proto oneof field as a type in another message?
假设我有这样的原始消息:
message WorkflowParameters {
oneof parameters {
WorkflowAParams a = 1;
WorkflowBParams b = 2;
}
}
而且我想要另一条可以指定工作流类型的消息。 像这样的东西:
message ListWorkflowsRequest {
// The type of workflows to fetch
WorkflowParameters.parameters workflow_type = 1;
}
以上不起作用(它抛出"WorkflowParameters.parameters" is not a type.
)推荐的方法是什么?
这是不可能的。 oneof
只是一个简单的语法糖/行为变化,对实际模式没有影响。 它影响生成代码的行为,但不影响序列化格式。 在下面的示例中,这两条消息是可互换的和有线兼容的:
message WorkflowParameters {
oneof parameters {
WorkflowAParams a = 1;
WorkflowBParams b = 2;
}
}
message WorkflowParameters2 {
WorkflowAParams a = 1;
WorkflowBParams b = 2;
}
现在,如果您只想指定 oneof 的哪一部分将被设置,理论上您可以使用生成的代码常量和一个简单的int
字段:
message ListWorkflowsRequest {
// The field number of WorkflowParameters that should be filled.
int32 workflow_type = 1;
}
所有语言生成器都应该创建足够方便的常量,例如 C++ 的WorkflowParameters::A_FIELD_NUMBER
A_FIELD_NUMBER。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.