class Avro::IO::DatumWriter

DatumWriter for generic ruby objects

Constants

VALIDATION_OPTIONS

Attributes

writers_schema[RW]

Public Class Methods

new(writers_schema=nil) click to toggle source
    # File lib/avro/io.rb
515 def initialize(writers_schema=nil)
516   @writers_schema = writers_schema
517 end

Public Instance Methods

write(datum, encoder) click to toggle source
    # File lib/avro/io.rb
519 def write(datum, encoder)
520   write_data(writers_schema, datum, encoder)
521 end
write_array(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
560 def write_array(writers_schema, datum, encoder)
561   raise AvroTypeError.new(writers_schema, datum) unless datum.is_a?(Array)
562   if datum.size > 0
563     encoder.write_long(datum.size)
564     datum.each do |item|
565       write_data(writers_schema.items, item, encoder)
566     end
567   end
568   encoder.write_long(0)
569 end
write_data(writers_schema, logical_datum, encoder) click to toggle source
    # File lib/avro/io.rb
523 def write_data(writers_schema, logical_datum, encoder)
524   datum = writers_schema.type_adapter.encode(logical_datum)
525 
526   unless Schema.validate(writers_schema, datum, VALIDATION_OPTIONS)
527     raise AvroTypeError.new(writers_schema, datum)
528   end
529 
530   # function dispatch to write datum
531   case writers_schema.type_sym
532   when :null;    encoder.write_null(datum)
533   when :boolean; encoder.write_boolean(datum)
534   when :string;  encoder.write_string(datum)
535   when :int;     encoder.write_int(datum)
536   when :long;    encoder.write_long(datum)
537   when :float;   encoder.write_float(datum)
538   when :double;  encoder.write_double(datum)
539   when :bytes;   encoder.write_bytes(datum)
540   when :fixed;   write_fixed(writers_schema, datum, encoder)
541   when :enum;    write_enum(writers_schema, datum, encoder)
542   when :array;   write_array(writers_schema, datum, encoder)
543   when :map;     write_map(writers_schema, datum, encoder)
544   when :union;   write_union(writers_schema, datum, encoder)
545   when :record, :error, :request;  write_record(writers_schema, datum, encoder)
546   else
547     raise AvroError.new("Unknown type: #{writers_schema.type}")
548   end
549 end
write_enum(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
555 def write_enum(writers_schema, datum, encoder)
556   index_of_datum = writers_schema.symbols.index(datum)
557   encoder.write_int(index_of_datum)
558 end
write_fixed(_writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
551 def write_fixed(_writers_schema, datum, encoder)
552   encoder.write(datum)
553 end
write_map(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
571 def write_map(writers_schema, datum, encoder)
572   raise AvroTypeError.new(writers_schema, datum) unless datum.is_a?(Hash)
573   if datum.size > 0
574     encoder.write_long(datum.size)
575     datum.each do |k,v|
576       encoder.write_string(k)
577       write_data(writers_schema.values, v, encoder)
578     end
579   end
580   encoder.write_long(0)
581 end
write_record(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
597 def write_record(writers_schema, datum, encoder)
598   raise AvroTypeError.new(writers_schema, datum) unless datum.is_a?(Hash)
599   writers_schema.fields.each do |field|
600     write_data(field.type, datum.key?(field.name) ? datum[field.name] : datum[field.name.to_sym], encoder)
601   end
602 end
write_union(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
583 def write_union(writers_schema, datum, encoder)
584   index_of_schema = writers_schema.schemas.find_index do |schema|
585     # Optimize away expensive validation calls for the common null type
586     schema.type_sym == :null ? datum.nil? : Schema.validate(schema, datum)
587   end
588 
589   unless index_of_schema
590     raise AvroTypeError.new(writers_schema, datum)
591   end
592 
593   encoder.write_long(index_of_schema)
594   write_data(writers_schema.schemas[index_of_schema], datum, encoder)
595 end