在 ScalaPb 中,如何创建一个案例对象和案例 class 从同一特征扩展?

In ScalaPb, How to create a case object and case class extending from the same trait?

我所有的案例 类 和案例对象都应该在 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

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