blob: 62d9274ae52ed18fb72d3b96b75a43047fa3bdc1 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#--
# Patch the Array class to provide methods for adding its contents
# to a Qpid::Proton::Codec::Data instance.
#++
module Qpid::Proton
module Types
# @deprecated use {UniformArray}
class ArrayHeader
def initialize(type, descriptor = nil)
Util::Deprecation.deprecated ArrayHeader, "UniformArray"
@type, @descriptor = Codec::Mapping[type], descriptor
end
attr_reader :type, :descriptor
def described?() !@descriptor.nil?; end
def <=>(x) [@type, @descriptor] <=> [x.type, x.descriptor]; end
include Comparable
end
# *Unsettled API* - An array that is converted to/from an AMQP array of uniform element type.
# A plain ruby +::Array+ is converted to/from an AMQP list, which can contain mixed type elements.
# If invalid elements are included, then {TypeError} will be raised when encoding to AMQP.
class UniformArray < ::Array
# Construct a uniform array, which will be converted to an AMQP array.
# A plain ruby +::Array+ is converted to/from an AMQP list, containing mixed type elements.
#
# @param type [Type] Elements must be convertible to this AMQP type.
# @param elements [Enumerator] Initial elements for the array
# @param descriptor [Object] Optional array descriptor
def initialize(type, elements=nil, descriptor=nil)
@type, @descriptor = type, descriptor
@proton_array_header = nil
raise ArgumentError, "no type specified for array" if @type.nil?
super elements if elements
end
# @deprecated backwards compatibility {UniformArray}
def proton_array_header
@proton_array_header ||= ArrayHeader.new(@type, @descriptor) # Deprecated
end
# @return [Type] Array elements must be convertible to this AMQP type
attr_reader :type
# @return [Object] Optional descriptor.
attr_reader :descriptor
def inspect() "#{self.class.name}<#{type}>#{super}"; end
def <=>(x)
ret = [@type, @descriptor] <=> [x.type, x.descriptor]
ret == 0 ? super : ret
end
end
end
end
# {Array} is converted to/from an AMQP list, which is allowed to hold mixed-type elements.
# Use {UniformArray} to convert/from an AMQP array with uniform element type.
class ::Array
# @deprecated use {UniformArray}
def proton_array_header
Qpid::Proton::Util::Deprecation.deprecated __method__, UniformArray
@proton_array_header
end
# @deprecated use {UniformArray}
def proton_array_header=(h)
Qpid::Proton::Util::Deprecation.deprecated __method__, UniformArray
@proton_array_header= h
end
# @deprecated use {UniformArray}
def proton_described?()
Qpid::Proton::Util::Deprecation.deprecated __method__, UniformArray
@proton_array_header && @proton_array_header.described?
end
# @deprecated
def proton_put(data)
Qpid::Proton::Util::Deprecation.deprecated __method__, "Codec::Data#array=, Codec::Data#list="
raise TypeError, "nil data" unless data
if @proton_array_header && @proton_array_header.type
data.array = self
else
data.list = self
end
end
# @deprecated
def self.proton_get(data)
Qpid::Proton::Util::Deprecation.deprecated __method__, "Codec::Data#list"
data.list
end
end