in scrooge-generator/src/main/scala/com/twitter/scrooge/backend/StructTemplate.scala [296:337]
private[this] def genWriteValue(
fieldName: CodeFragment,
fieldType: FieldType,
protoName: String
): CodeFragment = {
fieldType match {
case at: AnnotatedFieldType => genWriteValue(fieldName, at.unwrap, protoName)
case TBool =>
v(s"$protoName.writeBool($fieldName)")
case TByte =>
v(s"$protoName.writeByte($fieldName)")
case TI16 =>
v(s"$protoName.writeI16($fieldName)")
case TI32 =>
v(s"$protoName.writeI32($fieldName)")
case TI64 =>
v(s"$protoName.writeI64($fieldName)")
case TDouble =>
v(s"$protoName.writeDouble($fieldName)")
case TString =>
v(s"$protoName.writeString($fieldName)")
case TBinary =>
v(s"$protoName.writeBinary($fieldName)")
case _: EnumType =>
v(s"$protoName.writeI32($fieldName.value)")
case _: StructType =>
v(s"$fieldName.write($protoName)")
case t: SetType =>
val elemFieldType = s"TType.${genConstType(t.eltType)}"
val writeElement = genWriteValueFn2(t.eltType)
v(s"$rootProtos.writeSet($protoName, $fieldName, $elemFieldType, $writeElement)")
case t: ListType =>
genWriteListFn(t.eltType, fieldName, protoName)
case t: MapType =>
val keyType = s"TType.${genConstType(t.keyType)}"
val valType = s"TType.${genConstType(t.valueType)}"
val writeKey = genWriteValueFn2(t.keyType)
val writeVal = genWriteValueFn2(t.valueType)
v(s"$rootProtos.writeMap($protoName, $fieldName, $keyType, $writeKey, $valType, $writeVal)")
case _ => throw new IllegalArgumentException(s"Unsupported FieldType: $fieldType")
}
}