我正在使用消耗
com.google.protobuf.Any
的第三方服务。我需要传入一个 repeated Message myObject
对象,但是如何将重复的 protobuf 字段打包到 Any 中?
我正在按照
fun List<Message>.toProtobufAny(): com.google.protobuf.Any {...}
的思路编写一个 Kotlin 扩展函数,以(希望)使该函数适用于任何消息,因为我将发送各种重复的消息类型。我的第一次尝试是实现 Any.pack(RepeatedFieldBuilder<>)
,但语法尚未成功。没有找到关于这个特定用例的很多代码示例。
谢谢。
编辑以包含示例
@ILYAS_Kerbal
我设置了一条基本消息来保存重复的 Anys 列表
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}")
希望有帮助
Any
包含单个原型,而不是重复字段。
您可以创建一个
List<Any>
、您自己的 AnyRepeated
原型,或者包含一个具有适合您选择的消息类型的 Any
原型字段的原型的 repeated
,但您不能将多个原型打包到一个 Any
中
.