# 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 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