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