Sha256: aa9794ad57cd2b46f5ed001a3c94fe2a3906afbc74009639ad9c5179a5c03cd6

Contents?: true

Size: 1.78 KB

Versions: 5

Compression:

Stored size: 1.78 KB

Contents

Avro::IO::DatumWriter.class_eval do
  def write_data(writers_schema, datum, encoder)
    unless Avro::Schema.validate(writers_schema, datum, recursive: false)
      raise Avro::IO::AvroTypeError.new(writers_schema, datum)
    end

    # function dispatch to write datum
    case writers_schema.type_sym
    when :null;    encoder.write_null(datum)
    when :boolean; encoder.write_boolean(datum)
    when :string;  encoder.write_string(datum)
    when :int;     encoder.write_int(datum)
    when :long;    encoder.write_long(datum)
    when :float;   encoder.write_float(datum)
    when :double;  encoder.write_double(datum)
    when :bytes;   encoder.write_bytes(datum)
    when :fixed;   write_fixed(writers_schema, datum, encoder)
    when :enum;    write_enum(writers_schema, datum, encoder)
    when :array;   write_array(writers_schema, datum, encoder)
    when :map;     write_map(writers_schema, datum, encoder)
    when :union;   write_union(writers_schema, datum, encoder)
    when :record, :error, :request;  write_record(writers_schema, datum, encoder)
    else
      raise Avro::AvroError.new("Unknown type: #{writers_schema.type}")
    end
  end
end

module AvroPatches
  module SchemaValidator
    module IOPatches
      def write_record(writers_schema, datum, encoder)
        raise Avro::IO::AvroTypeError.new(writers_schema, datum) unless datum.is_a?(Hash)
        super
      end

      def write_array(writers_schema, datum, encoder)
        raise Avro::IO::AvroTypeError.new(writers_schema, datum) unless datum.is_a?(Array)
        super
      end

      def write_map(writers_schema, datum, encoder)
        raise Avro::IO::AvroTypeError.new(writers_schema, datum) unless datum.is_a?(Hash)
        super
      end
    end
  end
end

Avro::IO::DatumWriter.prepend(AvroPatches::SchemaValidator::IOPatches)

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
avro-patches-1.0.0.pre0 lib/avro-patches/schema_validator/io.rb
avro-patches-0.4.1 lib/avro-patches/schema_validator/io.rb
avro-patches-0.4.0 lib/avro-patches/schema_validator/io.rb
avro-patches-0.3.4 lib/avro-patches/schema_validator/io.rb
avro-patches-0.3.3 lib/avro-patches/schema_validator/io.rb