在 protobuf 中,我可以将地图的键限制为某些值吗?

问题描述

因此 protobuf 不允许字符串枚举作为映射中的键 我想将地图限制为只有键 a、b 或 c。 我在 Kotlin 工作,可以使用像 [(validate.rules).string = {pattern: "^a|b|c$"}]

这样的验证器
message payload {
  map<desired_constrained_key_here,string> my_map = 1;
}

能做到吗? 我该怎么做? 我在 protobuf 文档中没有看到这一点。

解决方法

不,那是不可能的;没有语法来表达这一点,也没有在任何实现中强制执行。

然而,以下两种方法都是可行的,而且效率更高,但需要不同的用法:

message payload {
  string a = 1;
  string b = 2;
  string c = 3;
}

这最终是表示 3 个可选键 abc 和每个键的 string 值之间的映射的另一种方式。>