Protobuf的Enum枚举类型不能同名?

简介: Protobuf的Enum枚举类型不能同名?

Protobuf的Enum枚举类型不能同名?

报错

enum CHARACTER_STATE
{
    IDLE = 0;
    MOVE = 1;
}

enum ENTITY_EVENT
{
    NONE = 0;
    IDLE = 1;
    MOVE_FWD = 2;
    MOVE_BACK = 3;
    JUMP = 4;
}

"message": "\"IDLE\" is already defined in \"SkillBridge.Message\".


"message": "Note that enum values use C++ scoping rules, meaning that enum values are siblings of their type, not children of it.  Therefore, \"NONE\" must be unique within \"SkillBridge.Message\", not just within \"ENTITY_EVENT\".",

原因

protobuf使用类似c的枚举规则,不允许枚举中出现同名。

解决办法

给枚举项加入前缀

enum CHARACTER_STATE
{
    IDLE = 0;
    MOVE = 1;
}


enum ENTITYEVENT
{
    ENTITYEVENT_NONE =0;
    ENTITY_EVENT_IDLE = 1;
    ENT_ITY_EVENT_MOVE_FWD = 2;
    ENT_IT_Y_EVENT_MOVE_BACK = 3;
    ENT_IT_Y_EVENT_JUM_P = 4;
}

在生成C#代码时,会忽略掉等同于ENTITYEVENT的前缀:

  public enum CHARACTER_STATE {
    [pbr::OriginalName("IDLE")] Idle = 0,
    [pbr::OriginalName("MOVE")] Move = 1,
  }

  public enum ENTITYEVENT {
    [pbr::OriginalName("ENTITYEVENT_NONE")] None = 0,
    [pbr::OriginalName("ENTITY_EVENT_IDLE")] Idle = 1,
    [pbr::OriginalName("ENT_ITY_EVENT_MOVE_FWD")] MoveFwd = 2,
    [pbr::OriginalName("ENT_IT_Y_EVENT_MOVE_BACK")] MoveBack = 3,
    [pbr::OriginalName("ENT_IT_Y_EVENT_JUM_P")] JumP = 4,
  }
目录
相关文章
|
Web App开发 域名解析 缓存
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
164368 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
|
存储 缓存 NoSQL
京东面试:亿级黑名单 如何设计?亿级查重 呢?(答案含:布隆过滤器、布谷鸟过滤器)
尼恩,40岁的老架构师,近期在读者交流群中分享了几个大厂面试题及其解决方案。这些问题包括亿级数据查重、黑名单存储、电话号码判断、安全网址判断等。尼恩给出了三种解决方案:使用BitMap位图、BloomFilter布隆过滤器和CuckooFilter布谷鸟过滤器。这些方法不仅高效,还能显著提升面试表现。尼恩还建议大家系统化学习,刷题《尼恩Java面试宝典PDF》,并提供简历修改和面试辅导,帮助大家实现“offer自由”。更多技术资料和PDF可在公众号【技术自由圈】获取。
|
安全 网络安全 数据安全/隐私保护
SSL/TLS证书**是一种用于加密网络通信的数字证书
SSL/TLS证书**是一种用于加密网络通信的数字证书
548 6
|
11月前
|
机器学习/深度学习 Rust 算法
Python环境管理的新选择:UV和Pixi,高性能Python环境管理方案
近期Python生态系统在包管理领域发生了重要变化,Anaconda调整商业许可证政策,促使社区寻找更开放的解决方案。本文介绍两款新一代Python包管理工具:UV和Pixi。UV用Rust编写,提供高性能依赖解析和项目级环境管理;Pixi基于Conda生态系统,支持conda-forge和PyPI包管理。两者分别适用于高性能需求和深度学习项目,为开发者提供了更多选择。
2469 2
|
算法 Java Go
玩转 Go Slices 切片泛型库
本文全面介绍了 Go slices 库的所有函数,并着重指出了使用某些函数时的注意事项,通过阅读本文,相信你将能够熟练掌握如何使用 Go Slices 库。
428 39
|
存储 监控 Linux
|
Cloud Native 编译器 Linux
如何在Windows、Mac和Linux操作系统上安装Protocol Buffers(protobuf)编译器
如何在Windows、Mac和Linux操作系统上安装Protocol Buffers(protobuf)编译器
900 0
|
XML JavaScript API
DOM 和 SAX 解析器之间的区别
【8月更文挑战第22天】
279 0
|
监控 Java Spring
gRPC中interceptor拦截器的总结和实践
gRPC中的interceptor拦截器分为客户端拦截器和服务端拦截器,分别是在客户端和服务端的请求被发送出去之前进行处理的逻辑。常见的使用场景有:(1)请求日志记录及监控;(2)添加请求头数据、以便代理转发使用;(3)请求或者结果重写。
1114 0
gRPC中interceptor拦截器的总结和实践
|
Go
Go 定时器:Timer 和 Ticker
本文深入探讨了 Go 语言中的 Timer 和 Ticker 定时器,详细介绍了它们的创建方式、基本用法以及相关的方法等。此外,文章还概括了这两个定时器之间的主要区别,并强调了在使用过程中的注意事项。
578 2
Go 定时器:Timer 和 Ticker