Protocol buffers 如何使用ScalaPB将protobuf Enum生成为字符串?
我的Protobuf消息中包含以下内容:Protocol buffers 如何使用ScalaPB将protobuf Enum生成为字符串?,protocol-buffers,scalapb,Protocol Buffers,Scalapb,我的Protobuf消息中包含以下内容: enum SegmentType { UNKNOWN = 0; TYPE_1 = 1; TYPE_2 = 2; TYPE_3 = 3; } optional SegmentType segment_type = 1 [default = UNKNOWN] 我想生成一个字符串,将value作为特定类型,而不是GeneratedEnumtype。比如说 SegmentType: String = "T
enum SegmentType {
UNKNOWN = 0;
TYPE_1 = 1;
TYPE_2 = 2;
TYPE_3 = 3;
}
optional SegmentType segment_type = 1 [default = UNKNOWN]
我想生成一个字符串,将value作为特定类型,而不是GeneratedEnum
type。比如说
SegmentType: String = "TYPE_1"
这解释了如何映射为自定义类型,但我不清楚如何映射为值类型。当我尝试以下操作时,ScalaPB显示了一个错误,即它应该在String companion类中实现
implicit val segmentType = TypeMapper[SegmentType, String](_.name)(SegmentType.fromName(_).get)
我怎样才能做到呢?还有一种方法可以将消息中的所有
Enum
类型转换为String
要获取编译器拾取的隐式类型映射器,可以将其放入所属的相同包SegmentType
的包对象中
假设您的proto有一个包语句,如下所示:
package a.b.c.d;
然后在Scala中:
package a.b.c
package object d {
implicit val segmentType =
TypeMapper[SegmentType, String](_.name)(SegmentType.fromName(_).get)
}
您还可以将其放在a.b.c.d
的任何父包中(例如a.b.c
、a.b
或a
)
对于第二个问题,您不能将所有枚举都设置为字符串,但可以将给定枚举类型的所有匹配项设置为字符串,因此不必单独为每个字段指定自定义类型:
enum SegmentType {
option (scalapb.enum_options).type = "String";
UNKNOWN = 0;
TYPE_1 = 1;
TYPE_2 = 2;
TYPE_3 = 3;
}
message F {
optional SegmentType segment_type = 1; // will be an Option[String]
}
成功了!如果您也将其添加到ScalaPB文档中,那就太好了!伟大的在结尾添加了一段