如何序列化/反序列化使用ScalaPB的'oneof'的protobuf消息?

Edw*_*don 3 scala protocol-buffers scalapb

我正在使用ScalaPB来编译我的Scala案例类,以便序列化我的protobuf消息.

我有一个.proto包含以下消息的文件:

message WrapperMessage {
    oneof msg {
        Login login = 1;
        Register register = 2;
    }
}

message Login {
    required string email = 1;
    required string password = 2;
}

message Register {
    required string email = 1;
    required string password = 2;
    optional string firstName = 3;
    optional string lastName = 4;
}
Run Code Online (Sandbox Code Playgroud)

我怎么创建我WrapperMessage知道我想在Login里面放一条消息msg

  val login = Login(email = "test@example.com", password = "testpass")
  val wrapperMessage = WrapperMessage(???)
  val wrapperMessageBytes = wrapperMessage.toByteArray
Run Code Online (Sandbox Code Playgroud)

现在让我们说我收到WrapperMessage了电线; 如何使用ScalaPB案例类方法反序列化消息?

Edw*_*don 6

ScalaPB的文档清楚地提供了我所问的问题的示例.在这个答案中,我根据我的问题定制了ScalaPB上提供的示例.

使用以下内容初始化消息oneof:

val login = Login(email = "test@example.com", password = "testpass")
val wrapperMessage = WrapperMessage().withLogin(login)
Run Code Online (Sandbox Code Playgroud)

要匹配邮件的oneof字段:

wrapperMessage.msg match {
  case Msg.Login(l) =>  // handle l
  case Msg.Register(r) =>  // handle r
  case Msg.Empty =>  // handle exceptional case...
}
Run Code Online (Sandbox Code Playgroud)