如何将重复的Protobuf消息打包为com.google.protobuf.Any?
问题描述
对接一个接收com.google.protobuf.Any类型的第三方服务,需要传入repeated Message myObject对象,但不知道如何将重复的Protobuf字段打包为Any类型。
我正在编写Kotlin扩展函数,格式类似fun List<Message>.toProtobufAny(): com.google.protobuf.Any {...},希望能适配任意Message类型(因为需要发送多种重复消息类型)。最初尝试实现Any.pack(RepeatedFieldBuilder<>),但语法上一直没成功,也没找到很多针对该场景的代码示例。
补充实现示例
我定义了一个基础消息来存放Any类型的重复列表:
message RepeatedAny { repeated google.protobuf.Any values = 1; }
然后创建了几个扩展函数来实现该功能:
/** * Given a list of protobuf messages, create a protobuf.Any */ fun List<Message>.toProtoAny(): Any { val repeatedAny = RepeatedAny.newBuilder().addAllValues( this.map { msg -> msg.toProtoAny() } ).build() return repeatedAny.toProtoAny() } /** * Pack a protobuf.Message into a protobuf.Any */ fun Message.toProtoAny(): Any = this.packAny() /** * Pack a protobuf.Message into a protobuf.Any */ private fun Message.packAny(): Any = Any.pack(this, "$defaultAnyLibrary/${this.javaClass.name}")
内容的提问来源于stack exchange,提问作者romanpilot
相关产品推荐
相关产品推荐

