首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScalaPB: compilePlugin生成不适当的类

ScalaPB: compilePlugin生成不适当的类
EN

Stack Overflow用户
提问于 2021-09-21 11:23:00
回答 1查看 55关注 0票数 0

我正在尝试使用Protocol Buffers来生成Scala case类。

基本设置为: 1.In project/plugins.sbt:

代码语言:javascript
复制
  addSbtPlugin("com.thesamet" % "sbt-protoc" % "1.0.0")

  libraryDependencies += "com.thesamet.scalapb" %% "compilerplugin" % "0.10.10"

2.在build.sbt中:

代码语言:javascript
复制
name := "GeoService"

scalaVersion := "2.12.14"

Compile / PB.targets := Seq(
   scalapb.gen() -> (Compile / sourceManaged).value
)

 libraryDependencies ++= Seq(
     "com.thesamet.scalapb" %% "scalapb-runtime" % 
    scalapb.compiler.Version.scalapbVersion % "protobuf"
)

包含.proto-file:

代码语言:javascript
复制
 syntax = "proto3";

 package ru.spb.geo.model;

 import "google/protobuf/timestamp.proto";

  message GeoPoint {
       int32 id = 1;
       int32 latitude = 2;
       int32 longitude = 3;
       google.protobuf.Timestamp time = 4;
  }

但在目标目录中,它会生成非常奇怪的类"GeoPoint“(这个”短“类的一部分):

代码语言:javascript
复制
@SerialVersionUID(0L)
final case class GeoPoint(
  id: _root_.scala.Int = 0,
  latitude: _root_.scala.Int = 0,
  longitude: _root_.scala.Int = 0,
  time: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp] =
  _root_.scala.None,
       unknownFields: _root_.scalapb.UnknownFieldSet =  
 .scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[GeoPoint] {
     @transient
      private[this] var __serializedSizeCachedValue: _root_.scala.Int = 0
      private[this] def __computeSerializedValue(): _root_.scala.Int = {
         var __size = 0
  
  {
    val __value = id
    if (__value != 0) {
      __size += _root_.com.google.protobuf.CodedOutputStream.computeInt32Size(1, 
 __value)
    }
  };
  
  {
    val __value = latitude
    if (__value != 0) {
      __size += _root_.com.google.protobuf.CodedOutputStream.computeInt32Size(2, 
  __value)
    }
  };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-21 14:12:51

它按预期工作。生成的case类具有proto中每个字段的成员。生成代码的其余部分负责序列化和反序列化。您可以在此处阅读有关生成的代码以及如何使用它的更多信息:https://scalapb.github.io/docs/generated-code

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69268035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档