ruby/lib/core/condition.rb (45 lines of code) (raw):

# 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. module Qpid::Proton # An AMQP error condition. # # An error sent across an AMQP connection has a name, description and optional extra info. # The {Connectin}, {Session} and {Link} endpoint classes all have a #condition method to # check for errors. # # {Condition} can also be raised as an exception. # class Condition < ProtonError attr_reader :name, :description, :info def initialize(name, description = nil, info = nil) @name = name @description = description @info = info super(to_s) end def to_s() "#{@name}: #{@description}"; end def inspect() "#{self.class.name}(#{@name.inspect}, #{@description.inspect}, #{@info.inspect})"; end def ==(other) ((other.is_a? Condition) && (other.name == self.name) && (other.description == self.description) && (other.info == self.info)) end # Convert an object to a condition. # @param obj the object to turn into a condition # @param default_name name to use if obj does not imply a name # @return [Condition] Conversion depends on the type of obj # - Condition: return obj # - Exception: return Condition(obj.class.name, obj.to_s) # - String-like: return String.try_convert(obj) # - nil: return nil # @raise ::ArgumentError if obj is not convertible to {Condition} def self.convert(obj, default_name="error") case obj when nil then nil when Condition then obj when Exception then Condition.new(obj.class.name, obj.to_s) when SWIG::TYPE_p_pn_condition_t if Cproton.pn_condition_is_set(obj) Condition.new(Cproton.pn_condition_get_name(obj), Cproton.pn_condition_get_description(obj), Codec::Data.to_object(Cproton.pn_condition_info(obj))) end else raise ::ArgumentError, "can't convert #{obj.class.name} to #{self.class.name}" unless obj.respond_to? :to_str Condition.new(default_name, obj.to_str) end end private def self.assign(impl, cond) Cproton.pn_condition_clear(impl) if cond cond = self.convert(cond) Cproton.pn_condition_set_name(impl, cond.name) if cond.name Cproton.pn_condition_set_description(impl, cond.description) if cond.description Codec::Data.from_object(Cproton.pn_condition_info(impl), cond.info) if cond.info end end end end