in scrooge-core/src/main/scala/com/twitter/scrooge/internal/TProtocols.scala [91:130]
private[this] def typeForCollection(elementType: Byte): Byte =
if (elementType == TType.ENUM) TType.I32
else elementType
def writeList[T](
protocol: TProtocol,
list: collection.Seq[T],
elementType: Byte,
writeElement: (TProtocol, T) => Unit
): Unit = {
val size = list.size
protocol.writeListBegin(new TList(typeForCollection(elementType), size))
list match {
case wrappedArray: mutable.WrappedArray[T] =>
val arr = wrappedArray.array
var i = 0
while (i < size) {
val el: T = arr(i).asInstanceOf[T]
writeElement(protocol, el)
i += 1
}
case arrayBuffer: ArrayBuffer[T] =>
var i = 0
while (i < size) {
writeElement(protocol, arrayBuffer(i))
i += 1
}
case _: IndexedSeq[_] =>
var i = 0
while (i < size) {
writeElement(protocol, list(i))
i += 1
}
case _ =>
list.foreach { element =>
writeElement(protocol, element)
}
}
protocol.writeListEnd()
}