我正在使用最新的protobuf.js和 Node.js 4.4.5。
我目前很难protobuf.js
输出枚举而不是整数的字符串定义。我尝试了几个建议,但都没有奏效:
我想这是因为protobuf.js
第一个 API 发生了变化。对于第二个,我可以部分使用建议的解决方案,但如果消息嵌套在其他消息中,则构建器似乎回退到使用整数值,尽管字符串值已明确设置。
理想情况下,我想覆盖用于生成枚举值的函数,但我很难用调试器找到正确的函数。或者有没有更好的方法来实现深度嵌套的对象?
我正在使用最新的protobuf.js和 Node.js 4.4.5。
我目前很难protobuf.js
输出枚举而不是整数的字符串定义。我尝试了几个建议,但都没有奏效:
我想这是因为protobuf.js
第一个 API 发生了变化。对于第二个,我可以部分使用建议的解决方案,但如果消息嵌套在其他消息中,则构建器似乎回退到使用整数值,尽管字符串值已明确设置。
理想情况下,我想覆盖用于生成枚举值的函数,但我很难用调试器找到正确的函数。或者有没有更好的方法来实现深度嵌套的对象?
生成的 JS 代码protoc
只有一个方向的地图,例如
proto.foo.Bar.Myenum = {
HEY: 0,
HO: 1
};
理由就在这里, 但您必须在自己的 JS 代码中进行反向查找。有很多简单的解决方案。我在https://stackoverflow.com/a/59360329/449347上使用了那个, 即
通用反向映射器函数...
export function getKey(map, val) {
return Object.keys(map).find(key => map[key] === val);
}
犹...
import { Bar } from "js/proto/bar_pb";
expect(getKey(proto.foo.Bar.Myenum, 0)).toEqual("HEY");
expect(getKey(proto.foo.Bar.Myenum, 1)).toEqual("HO");
expect(getKey(proto.foo.Bar.Myenum, 99)).toBeUndefined();