如何在protobuf中添加if排序条件?

rob*_*bin 3 protocol-buffers

我有一个如下的 protobuf 定义,

message SearchRequest {
    string my_id = 1;

    enum MyStrategy {
            MY_TEST1 = 1;
            MY_TEST2 = 2;
    }
    MyStrategy my_strategy = 2;
}
Run Code Online (Sandbox Code Playgroud)

现在我想添加一个选项,例如如果选择 MY_TEST2,则要求客户端从另一组选项中再次选择,如果选择 MY_TEST1,则不会提供任何选项。

Mar*_*ell 7

提示输入值的实际行为是 UI 的事情,与 protobuf 完全无关;protobuf 只是描述数据交换,所以我猜测(尽管请纠正我)您实际上想说的是:

作为搜索的一部分,用户需要选择一个“策略”;每个策略都有不同的需要提供的字段;我如何描述每个策略所需的字段,并对策略的选择进行编码?

如果是这样,听起来您实际上想要描述的是 a oneof,即

syntax="proto3";
message SearchRequest {
    string my_id = 1;
    oneof strategy {
        SearchOptionsFoo foo = 2;
        SearchOptionsBar bar = 3;
    }
}
message SearchOptionsFoo {
    // fields here ...
}
message SearchOptionsBar {
    // fields here ...
}
Run Code Online (Sandbox Code Playgroud)