blob: 250dc0571c564ede6bf2562c0191f5caf157ea7b [file]
# 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.
module ArrowFormat
class Schema
attr_reader :fields
attr_reader :metadata
attr_reader :message_metadata
def initialize(fields, metadata: nil, message_metadata: nil)
@fields = fields
@metadata = metadata
@message_metadata = message_metadata
end
def [](name_or_index)
case name_or_index
when Integer
@fields[name_or_index]
when Symbol
name_to_field[name_or_index.to_s]
else
name_to_field[name_or_index.to_str]
end
end
def to_flatbuffers
fb_schema = FB::Schema::Data.new
fb_schema.endianness = FB::Endianness::LITTLE
fb_schema.fields = fields.collect(&:to_flatbuffers)
fb_schema.custom_metadata = FB.build_custom_metadata(@metadata)
# fb_schema.features = @features
fb_schema
end
private
def name_to_field
@name_to_field ||= build_name_to_field
end
def build_name_to_field
name_to_field = {}
@fields.each do |field|
name_to_field[field.name] = field
end
name_to_field
end
end
end