
Spec
proto 枚举类型生成
本说明描述在枚举上如何使用 extend/constant.proto 中的扩展字段,为每个枚举值附加业务编码、多语言文案以及错误相关信息。
主要依赖:
apihug/protobuf/extend/constant.protoextend google.protobuf.EnumValueOptions { Meta field = 37020; }Meta 信息:
syntax = "proto3";
package your.package;
import "apihug/protobuf/extend/constant.proto";
enum OrderStatus {
UNKNOWN = 0 [(hope.constant.field) = {
code: 0;
message: "unknown";
message2: "未知";
}];
CREATED = 1 [(hope.constant.field) = {
code: 1;
message: "created";
message2: "已创建";
}];
}
Meta 用于描述枚举值的通用信息:
code (int32)
message (string)
message2 (string)
error (Error)
如果不配置 Meta,框架可以按默认规则推断,但为了可读性和稳定性,推荐为新代码显式设置。
当枚举用于错误码(例如业务错误、系统错误)时,可在 Meta.error 中描述错误信息:
enum UserError {
USER_NOT_FOUND = 1 [(hope.constant.field) = {
code: 10001;
message: "user_not_found";
message2: "用户不存在";
error: {
title: "User not found";
tips: "检查用户ID是否正确,或联系管理员";
http_status: NOT_FOUND;
phase: SERVICE;
severity: ERROR;
};
}];
}
title (string)
tips (string)
http_status (HttpStatus 枚举)
BAD_REQUEST、UNAUTHORIZED、NOT_FOUND、INTERNAL_SERVER_ERROR 等。phase (Phase 枚举)
CONTROLLER:接口/表示层。SERVICE:服务/应用层。DOMAIN:领域模型层。severity (Severity 枚举)
LOW:低影响。WARN:警告,可重试。ERROR:正常业务无法继续。FATAL:严重错误,可能破坏数据或需要人工介入。BAD_REQUEST (400)。UNAUTHORIZED (401) 或 FORBIDDEN (403)。NOT_FOUND (404)。INTERNAL_SERVER_ERROR (500)。code,避免随意复用或修改已有编码。message / message2 文案。error 字段,方便统一处理和排查问题。HttpStatus 时,以标准 HTTP 语义为基础,避免过度使用 200/500 作为通用状态。