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