def readWriteInfo[T <: FieldType]()

in scrooge-generator/src/main/scala/com/twitter/scrooge/backend/StructTemplate.scala [46:144]


  def readWriteInfo[T <: FieldType](sid: SimpleID, t: FieldType): Dictionary = {
    t match {
      case at: AnnotatedFieldType => readWriteInfo(sid, at.unwrap)
      case t: ListType =>
        val elt = sid.append("_element")
        TypeTemplate + Dictionary(
          "fieldType" -> genType(t),
          "isCollection" -> v(true),
          "isList" -> v(
            Dictionary(
              "name" -> genID(sid),
              "eltName" -> genID(elt),
              "eltConstType" -> genConstType(t.eltType),
              "eltWireConstType" -> genWireConstType(t.eltType),
              "eltType" -> genType(t.eltType),
              "eltReadWriteInfo" -> v(readWriteInfo(elt, t.eltType))
            )
          )
        )
      case t: SetType =>
        val elt = sid.append("_element")
        TypeTemplate + Dictionary(
          "fieldType" -> genType(t),
          "isCollection" -> v(true),
          "isSet" -> v(
            Dictionary(
              "name" -> genID(sid),
              "eltName" -> genID(elt),
              "eltConstType" -> genConstType(t.eltType),
              "eltWireConstType" -> genWireConstType(t.eltType),
              "eltType" -> genType(t.eltType),
              "isEnumSet" -> v(t.eltType.isInstanceOf[EnumType]),
              "eltReadWriteInfo" -> v(readWriteInfo(elt, t.eltType))
            )
          )
        )
      case t: MapType =>
        val key = sid.append("_key")
        val value = sid.append("_value")
        TypeTemplate + Dictionary(
          "fieldType" -> genType(t),
          "isCollection" -> v(true),
          "isMap" -> v(
            Dictionary(
              "name" -> genID(sid),
              "keyConstType" -> genConstType(t.keyType),
              "keyWireConstType" -> genWireConstType(t.keyType),
              "valueConstType" -> genConstType(t.valueType),
              "valueWireConstType" -> genWireConstType(t.valueType),
              "keyType" -> genType(t.keyType),
              "valueType" -> genType(t.valueType),
              "keyName" -> genID(key),
              "valueName" -> genID(value),
              "keyReadWriteInfo" -> v(readWriteInfo(key, t.keyType)),
              "valueReadWriteInfo" -> v(readWriteInfo(value, t.valueType))
            )
          )
        )
      case t: StructType =>
        TypeTemplate + Dictionary(
          "isNamedType" -> v(true),
          "isImported" -> v(t.scopePrefix.isDefined),
          "fieldType" -> genType(t),
          "isStruct" -> v(
            Dictionary(
              "name" -> genID(sid)
            )
          )
        )
      case t: EnumType =>
        TypeTemplate + Dictionary(
          "isNamedType" -> v(true),
          "isImported" -> v(t.scopePrefix.isDefined),
          "fieldType" -> {
            genType(t.copy(enum = t.enum.copy(t.enum.sid.toTitleCase)))
          },
          "isEnum" -> v(
            Dictionary(
              "name" -> genID(sid)
            )
          )
        )
      case t: BaseType =>
        TypeTemplate + Dictionary(
          "fieldType" -> genType(t),
          "isBase" -> v(
            Dictionary(
              "type" -> genType(t),
              "name" -> genID(sid),
              "protocolWriteMethod" -> genProtocolWriteMethod(t),
              "protocolReadMethod" -> genProtocolReadMethod(t),
              "protocolSkipMethod" -> genProtocolSkipMethod(t)
            )
          )
        )
      case _: ReferenceType =>
        throw new ScroogeInternalException("ReferenceType should have been resolved by now")
    }
  }