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, logical_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.
500 501 502 |
# File 'lib/avro/io.rb', line 500 def initialize(writers_schema=nil) @writers_schema = writers_schema end |
Instance Attribute Details
#writers_schema ⇒ Object
Returns the value of attribute writers_schema.
499 500 501 |
# File 'lib/avro/io.rb', line 499 def writers_schema @writers_schema end |
Instance Method Details
#write(datum, encoder) ⇒ Object
504 505 506 |
# File 'lib/avro/io.rb', line 504 def write(datum, encoder) write_data(writers_schema, datum, encoder) end |
#write_array(writers_schema, datum, encoder) ⇒ Object
545 546 547 548 549 550 551 552 553 |
# File 'lib/avro/io.rb', line 545 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, logical_datum, encoder) ⇒ Object
508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 |
# File 'lib/avro/io.rb', line 508 def write_data(writers_schema, logical_datum, encoder) datum = writers_schema.type_adapter.encode(logical_datum) unless Schema.validate(writers_schema, datum, encoded = true) 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
540 541 542 543 |
# File 'lib/avro/io.rb', line 540 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
536 537 538 |
# File 'lib/avro/io.rb', line 536 def write_fixed(writers_schema, datum, encoder) encoder.write(datum) end |
#write_map(writers_schema, datum, encoder) ⇒ Object
555 556 557 558 559 560 561 562 563 564 |
# File 'lib/avro/io.rb', line 555 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
577 578 579 580 581 |
# File 'lib/avro/io.rb', line 577 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
566 567 568 569 570 571 572 573 574 575 |
# File 'lib/avro/io.rb', line 566 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 |