【问题标题】:In ScalaPb, How to create a case object and case class extending from the same trait?在 ScalaPb 中,如何创建从相同特征扩展的案例对象和案例类?
【发布时间】:2019-12-19 14:56:10
【问题描述】:

我所有的案例类和案例对象都应该在 protobuf 中。现在我需要它们属于一个特征。

可悲的是,我就是这样做的:

message WGCommand {
    oneof sealed_value {
        EnqueueWorkDone enq = 1;
        OpenWorkgroup oWg = 3;
    }
}

message OpenWorkgroup {}

message EnqueueWorkDone {
    required string id = 1;
    required string actorRef = 2;
}

这个创造了

final case class OpenWorkgroup(){...}

我希望我的 protobuf 生成如下内容:

sealed trait WGCommand
case object OpenWorkgroup extends WGCommand
case class EnqueueWorkDone(id:String, actorRef:String) extends WGCommand

【问题讨论】:

  • 我认为您要问的是如何使没有字段的消息成为案例对象而不是案例类。这目前是不可能的,但在过去出现了,这是我们可以考虑的增强功能(请参阅github.com/scalapb/ScalaPB/issues/485) - 随时就该问题留下注释。同时,您可以创建自己的 ADT 层次结构并使用自定义类型来转换它们。
  • 谢谢@thesamet。我已经辞职使用空消息。无论如何,我得到的案例类比案例对象多。如果您可以将您的评论作为答案转移...我会接受的。 :)

标签: scala protocol-buffers scalapb


【解决方案1】:

我认为您要问的是如何使没有字段的消息成为案例对象而不是案例类。这目前是不可能的,但在过去出现了,这是我们可以考虑的增强功能(请参阅https://github.com/scalapb/ScalaPB/issues/485) - 随时就该问题留下注释。同时,您可以创建自己的 ADT 层次结构并使用自定义类型来转换它们。

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2017-11-23
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多