class Avro::IO::DatumWriter

DatumWriter for generic ruby objects

Attributes

writers_schema[RW]

Public Class Methods

new(writers_schema=nil) click to toggle source
    # File lib/avro/io.rb
500 def initialize(writers_schema=nil)
501   @writers_schema = writers_schema
502 end

Public Instance Methods

write(datum, encoder) click to toggle source
    # File lib/avro/io.rb
504 def write(datum, encoder)
505   write_data(writers_schema, datum, encoder)
506 end
write_array(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
545 def write_array(writers_schema, datum, encoder)
546   if datum.size > 0
547     encoder.write_long(datum.size)
548     datum.each do |item|
549       write_data(writers_schema.items, item, encoder)
550     end
551   end
552   encoder.write_long(0)
553 end
write_data(writers_schema, logical_datum, encoder) click to toggle source
    # File lib/avro/io.rb
508 def write_data(writers_schema, logical_datum, encoder)
509   datum = writers_schema.type_adapter.encode(logical_datum)
510 
511   unless Schema.validate(writers_schema, datum, encoded = true)
512     raise AvroTypeError.new(writers_schema, datum)
513   end
514 
515   # function dispatch to write datum
516   case writers_schema.type_sym
517   when :null;    encoder.write_null(datum)
518   when :boolean; encoder.write_boolean(datum)
519   when :string;  encoder.write_string(datum)
520   when :int;     encoder.write_int(datum)
521   when :long;    encoder.write_long(datum)
522   when :float;   encoder.write_float(datum)
523   when :double;  encoder.write_double(datum)
524   when :bytes;   encoder.write_bytes(datum)
525   when :fixed;   write_fixed(writers_schema, datum, encoder)
526   when :enum;    write_enum(writers_schema, datum, encoder)
527   when :array;   write_array(writers_schema, datum, encoder)
528   when :map;     write_map(writers_schema, datum, encoder)
529   when :union;   write_union(writers_schema, datum, encoder)
530   when :record, :error, :request;  write_record(writers_schema, datum, encoder)
531   else
532     raise AvroError.new("Unknown type: #{writers_schema.type}")
533   end
534 end
write_enum(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
540 def write_enum(writers_schema, datum, encoder)
541   index_of_datum = writers_schema.symbols.index(datum)
542   encoder.write_int(index_of_datum)
543 end
write_fixed(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
536 def write_fixed(writers_schema, datum, encoder)
537   encoder.write(datum)
538 end
write_map(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
555 def write_map(writers_schema, datum, encoder)
556   if datum.size > 0
557     encoder.write_long(datum.size)
558     datum.each do |k,v|
559       encoder.write_string(k)
560       write_data(writers_schema.values, v, encoder)
561     end
562   end
563   encoder.write_long(0)
564 end
write_record(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
577 def write_record(writers_schema, datum, encoder)
578   writers_schema.fields.each do |field|
579     write_data(field.type, datum[field.name], encoder)
580   end
581 end
write_union(writers_schema, datum, encoder) click to toggle source
    # File lib/avro/io.rb
566 def write_union(writers_schema, datum, encoder)
567   index_of_schema = -1
568   found = writers_schema.schemas.
569     find{|e| index_of_schema += 1; found = Schema.validate(e, datum) }
570   unless found  # Because find_index doesn't exist in 1.8.6
571     raise AvroTypeError.new(writers_schema, datum)
572   end
573   encoder.write_long(index_of_schema)
574   write_data(writers_schema.schemas[index_of_schema], datum, encoder)
575 end