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

2024-03-16

我正在使用 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;
}

我如何创建我的WrapperMessage知道我想放一个Login里面的消息msg?

  val login = Login(email = "[email protected] /cdn-cgi/l/email-protection", password = "testpass")
  val wrapperMessage = WrapperMessage(???)
  val wrapperMessageBytes = wrapperMessage.toByteArray

假设现在我收到了WrapperMessage通过电线;如何使用 ScalaPB 案例类方法反序列化消息?


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

初始化消息oneof:

val login = Login(email = "[email protected] /cdn-cgi/l/email-protection", password = "testpass")
val wrapperMessage = WrapperMessage().withLogin(login)

匹配消息的oneof field:

wrapperMessage.msg match {
  case Msg.Login(l) =>  // handle l
  case Msg.Register(r) =>  // handle r
  case Msg.Empty =>  // handle exceptional case...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 ScalaPB 序列化/反序列化使用“oneof”的 protobuf 消息? 的相关文章

随机推荐