5

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

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

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

4

1 回答 1

1

对于原型定义

message PBPerson {
  int64 id = 1;
  string name = 2;
  google.protobuf.StringValue phone = 3;
  repeated string hobbies = 4;
}

和scala案例类定义

case class Person(
  id: Long,
  name: String,
  phone: Option[String],
  hobbies: Seq[String])

你可以使用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)

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

于 2021-04-16T10:23:45.980 回答