private[this] def genWriteValueFn2()

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")
    }
  }