Sha256: 1c348812afc555a82038aac713bfa11099f0821f9123b22dcd68816f6e3cdfe6

Contents?: true

Size: 1.22 KB

Versions: 9

Compression:

Stored size: 1.22 KB

Contents

module Avromatic
  module IO
    # Subclass DatumWriter to use additional information about union member
    # index.
    class DatumWriter < Avro::IO::DatumWriter
      def write_union(writers_schema, datum, encoder)
        optional = writers_schema.schemas.first.type_sym == :null
        if datum.is_a?(Hash) && datum.key?(Avromatic::IO::UNION_MEMBER_INDEX)
          index_of_schema = datum[Avromatic::IO::UNION_MEMBER_INDEX]
          # Avromatic does not treat the null of an optional field as part of the union
          index_of_schema += 1 if optional
        else
          index_of_schema = writers_schema.schemas.find_index do |schema|
            Avro::Schema.validate(schema, datum)
          end
        end
        unless index_of_schema
          raise Avro::IO::AvroTypeError.new(writers_schema, datum)
        end
        encoder.write_long(index_of_schema)
        write_data(writers_schema.schemas[index_of_schema], datum, encoder)
      end

      def write_record(writers_schema, datum, encoder)
        if datum.is_a?(Hash) && datum.key?(Avromatic::IO::ENCODING_PROVIDER)
          encoder.write(datum[Avromatic::IO::ENCODING_PROVIDER].avro_raw_value)
        else
          super
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
avromatic-1.0.0 lib/avromatic/io/datum_writer.rb
avromatic-0.33.0 lib/avromatic/io/datum_writer.rb
avromatic-0.32.0 lib/avromatic/io/datum_writer.rb
avromatic-0.32.0.rc0 lib/avromatic/io/datum_writer.rb
avromatic-0.31.0 lib/avromatic/io/datum_writer.rb
avromatic-0.30.0 lib/avromatic/io/datum_writer.rb
avromatic-0.29.1 lib/avromatic/io/datum_writer.rb
avromatic-0.29.0 lib/avromatic/io/datum_writer.rb
avromatic-0.28.1 lib/avromatic/io/datum_writer.rb