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 515 def initialize(writers_schema=nil) 516 @writers_schema = writers_schema 517 end
Public Instance Methods
write(datum, encoder)
click to toggle source
# File lib/avro/io.rb 519 def write(datum, encoder) 520 write_data(writers_schema, datum, encoder) 521 end
write_array(writers_schema, datum, encoder)
click to toggle source
# File lib/avro/io.rb 560 def write_array(writers_schema, datum, encoder) 561 raise AvroTypeError.new(writers_schema, datum) unless datum.is_a?(Array) 562 if datum.size > 0 563 encoder.write_long(datum.size) 564 datum.each do |item| 565 write_data(writers_schema.items, item, encoder) 566 end 567 end 568 encoder.write_long(0) 569 end
write_data(writers_schema, logical_datum, encoder)
click to toggle source
# File lib/avro/io.rb 523 def write_data(writers_schema, logical_datum, encoder) 524 datum = writers_schema.type_adapter.encode(logical_datum) 525 526 unless Schema.validate(writers_schema, datum, VALIDATION_OPTIONS) 527 raise AvroTypeError.new(writers_schema, datum) 528 end 529 530 # function dispatch to write datum 531 case writers_schema.type_sym 532 when :null; encoder.write_null(datum) 533 when :boolean; encoder.write_boolean(datum) 534 when :string; encoder.write_string(datum) 535 when :int; encoder.write_int(datum) 536 when :long; encoder.write_long(datum) 537 when :float; encoder.write_float(datum) 538 when :double; encoder.write_double(datum) 539 when :bytes; encoder.write_bytes(datum) 540 when :fixed; write_fixed(writers_schema, datum, encoder) 541 when :enum; write_enum(writers_schema, datum, encoder) 542 when :array; write_array(writers_schema, datum, encoder) 543 when :map; write_map(writers_schema, datum, encoder) 544 when :union; write_union(writers_schema, datum, encoder) 545 when :record, :error, :request; write_record(writers_schema, datum, encoder) 546 else 547 raise AvroError.new("Unknown type: #{writers_schema.type}") 548 end 549 end
write_enum(writers_schema, datum, encoder)
click to toggle source
# File lib/avro/io.rb 555 def write_enum(writers_schema, datum, encoder) 556 index_of_datum = writers_schema.symbols.index(datum) 557 encoder.write_int(index_of_datum) 558 end
write_fixed(_writers_schema, datum, encoder)
click to toggle source
# File lib/avro/io.rb 551 def write_fixed(_writers_schema, datum, encoder) 552 encoder.write(datum) 553 end
write_map(writers_schema, datum, encoder)
click to toggle source
# File lib/avro/io.rb 571 def write_map(writers_schema, datum, encoder) 572 raise AvroTypeError.new(writers_schema, datum) unless datum.is_a?(Hash) 573 if datum.size > 0 574 encoder.write_long(datum.size) 575 datum.each do |k,v| 576 encoder.write_string(k) 577 write_data(writers_schema.values, v, encoder) 578 end 579 end 580 encoder.write_long(0) 581 end
write_record(writers_schema, datum, encoder)
click to toggle source
# File lib/avro/io.rb 597 def write_record(writers_schema, datum, encoder) 598 raise AvroTypeError.new(writers_schema, datum) unless datum.is_a?(Hash) 599 writers_schema.fields.each do |field| 600 write_data(field.type, datum.key?(field.name) ? datum[field.name] : datum[field.name.to_sym], encoder) 601 end 602 end
write_union(writers_schema, datum, encoder)
click to toggle source
# File lib/avro/io.rb 583 def write_union(writers_schema, datum, encoder) 584 index_of_schema = writers_schema.schemas.find_index do |schema| 585 # Optimize away expensive validation calls for the common null type 586 schema.type_sym == :null ? datum.nil? : Schema.validate(schema, datum) 587 end 588 589 unless index_of_schema 590 raise AvroTypeError.new(writers_schema, datum) 591 end 592 593 encoder.write_long(index_of_schema) 594 write_data(writers_schema.schemas[index_of_schema], datum, encoder) 595 end