Class: Avro::IO::DatumWriter
- Inherits:
-
Object
- Object
- Avro::IO::DatumWriter
- Defined in:
- lib/avro/io.rb
Overview
DatumWriter for generic ruby objects
Instance Attribute Summary collapse
-
#writers_schema ⇒ Object
Returns the value of attribute writers_schema.
Instance Method Summary collapse
-
#initialize(writers_schema = nil) ⇒ DatumWriter
constructor
A new instance of DatumWriter.
- #write(datum, encoder) ⇒ Object
- #write_array(writers_schema, datum, encoder) ⇒ Object
- #write_data(writers_schema, datum, encoder) ⇒ Object
- #write_enum(writers_schema, datum, encoder) ⇒ Object
- #write_fixed(writers_schema, datum, encoder) ⇒ Object
- #write_map(writers_schema, datum, encoder) ⇒ Object
- #write_record(writers_schema, datum, encoder) ⇒ Object
- #write_union(writers_schema, datum, encoder) ⇒ Object
Constructor Details
#initialize(writers_schema = nil) ⇒ DatumWriter
Returns a new instance of DatumWriter.
533 534 535 |
# File 'lib/avro/io.rb', line 533 def initialize(writers_schema=nil) @writers_schema = writers_schema end |
Instance Attribute Details
#writers_schema ⇒ Object
Returns the value of attribute writers_schema.
532 533 534 |
# File 'lib/avro/io.rb', line 532 def writers_schema @writers_schema end |
Instance Method Details
#write(datum, encoder) ⇒ Object
537 538 539 |
# File 'lib/avro/io.rb', line 537 def write(datum, encoder) write_data(writers_schema, datum, encoder) end |
#write_array(writers_schema, datum, encoder) ⇒ Object
576 577 578 579 580 581 582 583 584 |
# File 'lib/avro/io.rb', line 576 def write_array(writers_schema, datum, encoder) if datum.size > 0 encoder.write_long(datum.size) datum.each do |item| write_data(writers_schema.items, item, encoder) end end encoder.write_long(0) end |
#write_data(writers_schema, datum, encoder) ⇒ Object
541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 |
# File 'lib/avro/io.rb', line 541 def write_data(writers_schema, datum, encoder) unless Schema.validate(writers_schema, datum) raise AvroTypeError.new(writers_schema, datum) end # function dispatch to write datum case writers_schema.type_sym when :null; encoder.write_null(datum) when :boolean; encoder.write_boolean(datum) when :string; encoder.write_string(datum) when :int; encoder.write_int(datum) when :long; encoder.write_long(datum) when :float; encoder.write_float(datum) when :double; encoder.write_double(datum) when :bytes; encoder.write_bytes(datum) when :fixed; write_fixed(writers_schema, datum, encoder) when :enum; write_enum(writers_schema, datum, encoder) when :array; write_array(writers_schema, datum, encoder) when :map; write_map(writers_schema, datum, encoder) when :union; write_union(writers_schema, datum, encoder) when :record, :error, :request; write_record(writers_schema, datum, encoder) else raise AvroError.new("Unknown type: #{writers_schema.type}") end end |
#write_enum(writers_schema, datum, encoder) ⇒ Object
571 572 573 574 |
# File 'lib/avro/io.rb', line 571 def write_enum(writers_schema, datum, encoder) index_of_datum = writers_schema.symbols.index(datum) encoder.write_int(index_of_datum) end |
#write_fixed(writers_schema, datum, encoder) ⇒ Object
567 568 569 |
# File 'lib/avro/io.rb', line 567 def write_fixed(writers_schema, datum, encoder) encoder.write(datum) end |
#write_map(writers_schema, datum, encoder) ⇒ Object
586 587 588 589 590 591 592 593 594 595 |
# File 'lib/avro/io.rb', line 586 def write_map(writers_schema, datum, encoder) if datum.size > 0 encoder.write_long(datum.size) datum.each do |k,v| encoder.write_string(k) write_data(writers_schema.values, v, encoder) end end encoder.write_long(0) end |
#write_record(writers_schema, datum, encoder) ⇒ Object
608 609 610 611 612 |
# File 'lib/avro/io.rb', line 608 def write_record(writers_schema, datum, encoder) writers_schema.fields.each do |field| write_data(field.type, datum[field.name], encoder) end end |
#write_union(writers_schema, datum, encoder) ⇒ Object
597 598 599 600 601 602 603 604 605 606 |
# File 'lib/avro/io.rb', line 597 def write_union(writers_schema, datum, encoder) index_of_schema = -1 found = writers_schema.schemas. find{|e| index_of_schema += 1; found = Schema.validate(e, datum) } unless found # Because find_index doesn't exist in 1.8.6 raise AvroTypeError.new(writers_schema, datum) end encoder.write_long(index_of_schema) write_data(writers_schema.schemas[index_of_schema], datum, encoder) end |