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
517 def initialize(writers_schema=nil)
518   @writers_schema = writers_schema
519 end

Public Instance Methods

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