繁体   English   中英

有没有办法将 proto oneof 字段用作另一条消息中的类型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM