Sources/SparkConnect/ArrowSchema.swift (46 lines of code) (raw):
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
import Foundation
/// @nodoc
public class ArrowField {
public let type: ArrowType
public let name: String
public let isNullable: Bool
init(_ name: String, type: ArrowType, isNullable: Bool) {
self.name = name
self.type = type
self.isNullable = isNullable
}
}
/// @nodoc
public class ArrowSchema {
public let fields: [ArrowField]
public let fieldLookup: [String: Int]
init(_ fields: [ArrowField]) {
var fieldLookup = [String: Int]()
for (index, field) in fields.enumerated() {
fieldLookup[field.name] = index
}
self.fields = fields
self.fieldLookup = fieldLookup
}
public func field(_ index: Int) -> ArrowField {
return self.fields[index]
}
public func fieldIndex(_ name: String) -> Int? {
return self.fieldLookup[name]
}
public class Builder {
private var fields: [ArrowField] = []
public init() {}
@discardableResult
public func addField(_ field: ArrowField) -> Builder {
fields.append(field)
return self
}
@discardableResult
public func addField(_ name: String, type: ArrowType, isNullable: Bool) -> Builder {
fields.append(ArrowField(name, type: type, isNullable: isNullable))
return self
}
public func finish() -> ArrowSchema {
return ArrowSchema(fields)
}
}
}