【问题标题】:How to get protobuf.js to output enum strings instead of integers如何让 protobuf.js 输出枚举字符串而不是整数
【发布时间】:2016-06-07 19:02:33
【问题描述】:

我正在使用最新的 protobuf.js 和 Node.js 4.4.5。

我目前很难让protobuf.js 输出枚举的字符串定义而不是整数。我尝试了几个建议,但都没有奏效:

我猜这是因为protobuf.js 中的第一个API 发生了变化。对于第二个,我可以部分使用建议的解决方案,但如果消息嵌套在其他消息中,构建器似乎会回退到使用整数值,尽管字符串值已被明确设置。

理想情况下,我想覆盖用于生成枚举值的函数,但我很难使用调试器找到正确的函数。或者有没有更好的方法来实现深度嵌套的对象?

【问题讨论】:

  • 请提供 .proto 文件的示例和要编码的测试数据。

标签: node.js protocol-buffers protobuf.js


【解决方案1】:

protoc 生成的 JS 代码只有一个方向的地图,例如

 proto.foo.Bar.Myenum = {
  HEY: 0,
  HO: 1
};

这样做的理由是here,但您必须在自己的 JS 代码中进行反向查找。有很多简单的解决方案。我用的是https://stackoverflow.com/a/59360329/449347,即

通用反向映射函数 ...

 export function getKey(map, val) {
  return Object.keys(map).find(key => map[key] === val);
}

UT ...

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多