func fromProto()

in Sources/SparkConnect/ProtoUtil.swift [20:74]


func fromProto(  // swiftlint:disable:this cyclomatic_complexity
  field: org_apache_arrow_flatbuf_Field
) -> ArrowField {
  let type = field.typeType
  var arrowType = ArrowType(ArrowType.ArrowUnknown)
  switch type {
  case .int:
    let intType = field.type(type: org_apache_arrow_flatbuf_Int.self)!
    let bitWidth = intType.bitWidth
    if bitWidth == 8 {
      arrowType = ArrowType(intType.isSigned ? ArrowType.ArrowInt8 : ArrowType.ArrowUInt8)
    } else if bitWidth == 16 {
      arrowType = ArrowType(intType.isSigned ? ArrowType.ArrowInt16 : ArrowType.ArrowUInt16)
    } else if bitWidth == 32 {
      arrowType = ArrowType(intType.isSigned ? ArrowType.ArrowInt32 : ArrowType.ArrowUInt32)
    } else if bitWidth == 64 {
      arrowType = ArrowType(intType.isSigned ? ArrowType.ArrowInt64 : ArrowType.ArrowUInt64)
    }
  case .bool:
    arrowType = ArrowType(ArrowType.ArrowBool)
  case .floatingpoint:
    let floatType = field.type(type: org_apache_arrow_flatbuf_FloatingPoint.self)!
    if floatType.precision == .single {
      arrowType = ArrowType(ArrowType.ArrowFloat)
    } else if floatType.precision == .double {
      arrowType = ArrowType(ArrowType.ArrowDouble)
    }
  case .utf8:
    arrowType = ArrowType(ArrowType.ArrowString)
  case .binary:
    arrowType = ArrowType(ArrowType.ArrowBinary)
  case .date:
    let dateType = field.type(type: org_apache_arrow_flatbuf_Date.self)!
    if dateType.unit == .day {
      arrowType = ArrowType(ArrowType.ArrowDate32)
    } else {
      arrowType = ArrowType(ArrowType.ArrowDate64)
    }
  case .time:
    let timeType = field.type(type: org_apache_arrow_flatbuf_Time.self)!
    if timeType.unit == .second || timeType.unit == .millisecond {
      let arrowUnit: ArrowTime32Unit = timeType.unit == .second ? .seconds : .milliseconds
      arrowType = ArrowTypeTime32(arrowUnit)
    } else {
      let arrowUnit: ArrowTime64Unit = timeType.unit == .microsecond ? .microseconds : .nanoseconds
      arrowType = ArrowTypeTime64(arrowUnit)
    }
  case .struct_:
    arrowType = ArrowType(ArrowType.ArrowStruct)
  default:
    arrowType = ArrowType(ArrowType.ArrowUnknown)
  }

  return ArrowField(field.name ?? "", type: arrowType, isNullable: field.nullable)
}