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