def toTsField()

in scrooge-generator-typescript/src/main/scala/com/gu/scrooge/backend/typescript/TypescriptGenerator.scala [125:213]


  def toTsField(
    fieldType: FieldType,
    index: Option[Int] = None,
    name: Option[String] = None,
    requiredness: Option[Requiredness] = None,
    variableName: String,
    depth: Int = 1,
    isLastField: Boolean = false
  ): TsField = {
    def simpleField(readingStatement: String, writingStatement: String): TsSimpleField = TsSimpleField(
      index = index,
      name = name,
      isOptional = requiredness.exists(_.isOptional),
      variableName = variableName,
      depth = depth,
      typescriptType = typescriptType(fieldType),
      thriftType = thriftType(fieldType),
      readingStatement = readingStatement,
      writingStatement = writingStatement,
      isLastField = isLastField
    )

    fieldType match {
      case TBool => simpleField("readBool", "writeBool")
      case TByte => simpleField("readByte", "writeByte")
      case TI16 => simpleField("readI16", "writeI16")
      case TI32 => simpleField("readI32", "writeI32")
      case TI64 => simpleField("readI64", "writeI64")
      case TDouble => simpleField("readDouble", "writeDouble")
      case TBinary => simpleField("readBinary", "writeBinary")
      case TString => simpleField("readString", "writeString")
      case _: EnumType => simpleField("readI32", "writeI32")
      case struct: StructType => TsNamedField(
        index = index,
        depth = depth,
        name = name,
        isOptional = requiredness.exists(_.isOptional),
        variableName = variableName,
        typescriptType(fieldType),
        thriftType = thriftType(fieldType),
        companionName = companionName(struct.sid),
        isLastField = isLastField
      )
      case lt: ListType => TsCollectionField(
        index = index,
        depth = depth,
        name = name,
        isOptional = requiredness.exists(_.isOptional),
        variableName = variableName,
        typescriptType = typescriptType(fieldType),
        thriftType = thriftType(fieldType),
        nestedType = toTsField(lt.eltType, depth = depth + 1, variableName = s"value${depth + 1}"),
        startReadingStatement = "readListBegin",
        endReadingStatement = "readListEnd",
        startWritingStatement = "writeListBegin",
        endWritingStatement = "writeListEnd",
        isLastField = isLastField,
      )
      case st: SetType => TsCollectionField(
        index = index,
        depth = depth,
        name = name,
        isOptional = requiredness.exists(_.isOptional),
        variableName = variableName,
        typescriptType = typescriptType(fieldType),
        thriftType = thriftType(fieldType),
        nestedType = toTsField(st.eltType, depth = depth + 1, variableName = s"value${depth + 1}"),
        startReadingStatement = "readSetBegin",
        endReadingStatement = "readSetEnd",
        startWritingStatement = "writeSetBegin",
        endWritingStatement = "writeSetEnd",
        isLastField = isLastField,
      )
      case mt: MapType => TsMapField(
        index = index,
        depth = depth,
        name = name,
        isOptional = requiredness.exists(_.isOptional),
        variableName = variableName,
        typescriptType = typescriptType(fieldType),
        thriftType = thriftType(fieldType),
        keyType = toTsField(mt.keyType, depth = depth + 1, variableName = s"key${depth + 1}"),
        keyIsNumber = mt.keyType == TI16 || mt.keyType == TI32 || mt.keyType.isInstanceOf[EnumType],
        valueType = toTsField(mt.valueType, depth = depth + 1, variableName = s"value${depth + 1}"),
        isLastField = isLastField,
      )
      case _ => throw new Exception(s"${fieldType.toString} not implemented yet")
    }
  }