我使用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 = "test@example.com", password = "testpass")
val wrapperMessage = WrapperMessage(???)
val wrapperMessageBytes = wrapperMessage.toByteArray
现在我们说我收到了WrapperMessage
电话;如何使用ScalaPB案例类方法反序列化消息?
答案 0 :(得分:5)
ScalaPB的文档清楚地提供了我所问的问题的示例。在这个答案中,我根据我的问题定制了ScalaPB上提供的示例。
使用oneof
初始化邮件:
val login = Login(email = "test@example.com", password = "testpass")
val wrapperMessage = WrapperMessage().withLogin(login)
匹配邮件的oneof
字段:
wrapperMessage.msg match {
case Msg.Login(l) => // handle l
case Msg.Register(r) => // handle r
case Msg.Empty => // handle exceptional case...
}
答案 1 :(得分:0)
您应该可以使用空构造函数初始化WrapperMessage
并调用.set_login(login)
您将反序列化为WrapperMessage
并在message.WhichOneof
上进行模式匹配,返回“login”或“register”。然后,您将在该特定消息上调用访问者(即message.login
)。