Protobuf:如何使用现有案例类

Joh*_*ins 5 scala protocol-buffers protobuf-java

项目中已经使用了一些案例类。这些类也用于光滑映射。这些类扩展了一些额外的特征。

我不想从*.proto描述中生成所有这些类。

有机会扩展它们protobuf吗?或者我应该为它们使用包装器。这些包装器将在其中进行描述*.proto并从中生成。

小智 1

对于原型定义

message PBPerson {
  int64 id = 1;
  string name = 2;
  google.protobuf.StringValue phone = 3;
  repeated string hobbies = 4;
}
Run Code Online (Sandbox Code Playgroud)

和 scala 案例类定义

case class Person(
  id: Long,
  name: String,
  phone: Option[String],
  hobbies: Seq[String])
Run Code Online (Sandbox Code Playgroud)

你可以使用https://github.com/changvvb/scala-protobuf-java

import pbconverts.{ Protoable, Scalable }
val convertedPBPerson:PBPerson = Protoable[Person,PBPerson].toProto(person)
val convertedPerson:Person = Scalable[Person,PBPerson].toScala(pbPerson)
Run Code Online (Sandbox Code Playgroud)

此外,该库使用 scala 宏来确保它是类型安全的转换。