module Mongo::Protocol::Serializers::Sections
MongoDB wire protocol serialization strategy for a Section of OP_MSG.
Serializes and de-serializes a list of Sections
.
@since 2.5.0
Public Class Methods
Deserializes a section of an OP_MSG from the IO stream.
@param [ BSON::ByteBuffer ] buffer Buffer containing the sections. @param [ Hash ] options
@option options [ Boolean ] :deserialize_as_bson Whether to perform
section deserialization using BSON types instead of native Ruby types wherever possible.
@return [ Array<BSON::Document> ] Deserialized sections.
@since 2.5.0
# File lib/mongo/protocol/serializers.rb, line 219 def self.deserialize(buffer, options = {}) end_length = (@flag_bits & Msg::FLAGS.index(:checksum_present)) == 1 ? 32 : 0 sections = [] until buffer.length == end_length case byte = buffer.get_byte when PayloadZero::TYPE_BYTE sections << PayloadZero.deserialize(buffer, options) when PayloadOne::TYPE_BYTE sections += PayloadOne.deserialize(buffer, options) else raise Error::UnknownPayloadType.new(byte) end end sections end
Serializes the sections of an OP_MSG, payload type 0 or 1.
@param [ BSON::ByteBuffer ] buffer Buffer to receive the serialized Sections
. @param [ Array<Hash, BSON::Document> ] value The sections to be serialized. @param [ Fixnum ] max_bson_size The max bson size of documents in the sections. @param [ true, false ] validating_keys Whether to validate document keys.
This option is deprecated and will not be used. It will removed in version 3.0.
@return [ BSON::ByteBuffer ] Buffer with serialized value.
@since 2.5.0
# File lib/mongo/protocol/serializers.rb, line 192 def self.serialize(buffer, value, max_bson_size = nil, validating_keys = nil) value.each do |section| case section[:type] when PayloadZero::TYPE PayloadZero.serialize(buffer, section[:payload], max_bson_size) when nil PayloadZero.serialize(buffer, section[:payload], max_bson_size) when PayloadOne::TYPE PayloadOne.serialize(buffer, section[:payload], max_bson_size) else raise Error::UnknownPayloadType.new(section[:type]) end end end
Whether there can be a size limit on this type after serialization.
@return [ true ] Documents can be size limited upon serialization.
@since 2.5.0
# File lib/mongo/protocol/serializers.rb, line 240 def self.size_limited? true end