class Tros::IO::DatumWriter

DatumWriter for generic ruby objects

Attributes

writers_schema[RW]

Public Class Methods

new(writers_schema=nil) click to toggle source
    # File lib/tros/io.rb
528 def initialize(writers_schema=nil)
529   @writers_schema = writers_schema
530 end

Public Instance Methods

write(datum, encoder) click to toggle source
    # File lib/tros/io.rb
532 def write(datum, encoder)
533   write_data(writers_schema, datum, encoder)
534 end
write_array(writers_schema, datum, encoder) click to toggle source
    # File lib/tros/io.rb
571 def write_array(writers_schema, datum, encoder)
572   if datum.size > 0
573     encoder.write_long(datum.size)
574     datum.each do |item|
575       write_data(writers_schema.items, item, encoder)
576     end
577   end
578   encoder.write_long(0)
579 end
write_data(writers_schema, datum, encoder) click to toggle source
    # File lib/tros/io.rb
536 def write_data(writers_schema, datum, encoder)
537   unless Schema.validate(writers_schema, datum)
538     raise AvroTypeError.new(writers_schema, datum)
539   end
540 
541   # function dispatch to write datum
542   case writers_schema.type_sym
543   when :null;    encoder.write_null(datum)
544   when :boolean; encoder.write_boolean(datum)
545   when :string;  encoder.write_string(datum)
546   when :int;     encoder.write_int(datum)
547   when :long;    encoder.write_long(datum)
548   when :float;   encoder.write_float(datum)
549   when :double;  encoder.write_double(datum)
550   when :bytes;   encoder.write_bytes(datum)
551   when :fixed;   write_fixed(writers_schema, datum, encoder)
552   when :enum;    write_enum(writers_schema, datum, encoder)
553   when :array;   write_array(writers_schema, datum, encoder)
554   when :map;     write_map(writers_schema, datum, encoder)
555   when :union;   write_union(writers_schema, datum, encoder)
556   when :record, :error, :request;  write_record(writers_schema, datum, encoder)
557   else
558     raise AvroError.new("Unknown type: #{writers_schema.type}")
559   end
560 end
write_enum(writers_schema, datum, encoder) click to toggle source
    # File lib/tros/io.rb
566 def write_enum(writers_schema, datum, encoder)
567   index_of_datum = writers_schema.symbols.index(datum)
568   encoder.write_int(index_of_datum)
569 end
write_fixed(writers_schema, datum, encoder) click to toggle source
    # File lib/tros/io.rb
562 def write_fixed(writers_schema, datum, encoder)
563   encoder.write(datum)
564 end
write_map(writers_schema, datum, encoder) click to toggle source
    # File lib/tros/io.rb
581 def write_map(writers_schema, datum, encoder)
582   if datum.size > 0
583     encoder.write_long(datum.size)
584     datum.each do |k,v|
585       encoder.write_string(k)
586       write_data(writers_schema.values, v, encoder)
587     end
588   end
589   encoder.write_long(0)
590 end
write_record(writers_schema, datum, encoder) click to toggle source
    # File lib/tros/io.rb
601 def write_record(writers_schema, datum, encoder)
602   writers_schema.fields.each do |field|
603     write_data(field.type, datum[field.name], encoder)
604   end
605 end
write_union(writers_schema, datum, encoder) click to toggle source
    # File lib/tros/io.rb
592 def write_union(writers_schema, datum, encoder)
593   index = writers_schema.schemas.find_index { |s| Schema.validate_strictly(s, datum) }
594   index ||= writers_schema.schemas.find_index { |s| Schema.validate(s, datum) }
595   raise AvroTypeError.new(writers_schema, datum) if index.nil?
596 
597   encoder.write_long(index)
598   write_data(writers_schema.schemas[index], datum, encoder)
599 end