in scrooge-generator/src/main/scala/com/twitter/scrooge/backend/StructTemplate.scala [259:293]
private[this] def genWriteValueFn2(fieldType: FieldType): CodeFragment = {
fieldType match {
case at: AnnotatedFieldType => genWriteValueFn2(at.unwrap)
case TBool =>
v("_root_.com.twitter.scrooge.internal.TProtocols.writeBoolFn")
case TByte =>
v("_root_.com.twitter.scrooge.internal.TProtocols.writeByteFn")
case TI16 =>
v("_root_.com.twitter.scrooge.internal.TProtocols.writeI16Fn")
case TI32 =>
v("_root_.com.twitter.scrooge.internal.TProtocols.writeI32Fn")
case TI64 =>
v("_root_.com.twitter.scrooge.internal.TProtocols.writeI64Fn")
case TDouble =>
v("_root_.com.twitter.scrooge.internal.TProtocols.writeDoubleFn")
case TString =>
v("_root_.com.twitter.scrooge.internal.TProtocols.writeStringFn")
case TBinary =>
v("_root_.com.twitter.scrooge.internal.TProtocols.writeBinaryFn")
case _: EnumType =>
v("_root_.com.twitter.scrooge.internal.TProtocols.writeEnumFn")
case _: StructType =>
val structType = genType(fieldType)
v(s"(proto, elem: $structType) => elem.write(proto)")
case _: ContainerType =>
val fieldName = v("elem")
val elemType = fieldType match {
case _: EnumType => v("Int")
case _ => genType(fieldType)
}
val writeElem = genWriteValue(fieldName, fieldType, "proto")
v(s"(proto, elem: $elemType) => { $writeElem }")
case _ => throw new IllegalArgumentException(s"Unsupported FieldType: $fieldType")
}
}