123456789_123456789_123456789_123456789_123456789_

Module: Mongo::Protocol::Serializers::Sections::PayloadOne Private

Relationships & Source Files
Defined in: lib/mongo/protocol/serializers.rb

Overview

MongoDB wire protocol serialization strategy for a payload 1 type Section of OP_MSG.

Since:

  • 2.5.0

Constant Summary

Class Method Summary

Class Method Details

.deserialize(buffer) ⇒ Array<BSON::Document>

Deserializes a section of payload type 1 of an OP_MSG from the IO stream.

Parameters:

  • buffer (BSON::ByteBuffer)

    Buffer containing the sections.

Returns:

  • (Array<BSON::Document>)

    Deserialized section.

Raises:

  • (NotImplementedError)

Since:

  • 2.5.0

[ GitHub ]

  
# File 'lib/mongo/protocol/serializers.rb', line 337

def self.deserialize(buffer)
  raise NotImplementedError

  start_size = buffer.length
  section_size = buffer.get_int32 # get the size
  end_size = start_size - section_size
  buffer.get_cstring # get the identifier
  documents = []
  until buffer.length == end_size
    documents << BSON::Document.from_bson(buffer)
  end
  documents
end

.serialize(buffer, value, max_bson_size = nil, validating_keys = nil) ⇒ BSON::ByteBuffer

Serializes a section of an OP_MSG, payload type 1.

Parameters:

  • buffer (BSON::ByteBuffer)

    Buffer to receive the serialized ::Mongo::Protocol::Serializers::Sections.

  • value (BSON::Document, Hash)

    The object to serialize.

  • max_bson_size (Fixnum) (defaults to: nil)

    The max bson size of documents in the section.

  • validating_keys (true, false) (defaults to: nil)

    Whether to validate document keys. This option is deprecated and will not be used. It will removed in version 3.0.

Returns:

  • (BSON::ByteBuffer)

    Buffer with serialized value.

Since:

  • 2.5.0

[ GitHub ]

  
# File 'lib/mongo/protocol/serializers.rb', line 319

def self.serialize(buffer, value, max_bson_size = nil, validating_keys = nil)
  buffer.put_byte(TYPE_BYTE)
  start = buffer.length
  buffer.put_int32(0) # hold for size
  buffer.put_cstring(value[:identifier])
  value[:sequence].each do |document|
    Document.serialize(buffer, document, max_bson_size)
  end
  buffer.replace_int32(start, buffer.length - start)
end