class DBus::Type
Represents the D-Bus types.
Corresponds to {SingleCompleteType}. Instances are immutable/frozen once fully constructed.
See also {DBus::Data::Signature} which is “type on the wire”.
Constants
- Array
Syntactic helper for constructing an array
Type. You may be looking for {Data::Array} instead. @examplet = Type::Array[Type::INT16]
- Hash
Syntactic helper for constructing a hash
Type. You may be looking for {Data::Array} and {Data::DictEntry} instead. @examplet = Type::Hash[Type::STRING, Type::VARIANT]
- Struct
Syntactic helper for constructing a struct
Type. You may be looking for {Data::Struct} instead. @examplet = Type::Struct[Type::INT16, Type::STRING]
- TYPE_MAPPING
Mapping from type number to name and alignment.
- Type
Formerly this was a
Moduleand there was aDBus::Type::Typeclass but the class got too prominent to keep its double double name. This is for backward compatibility.
Attributes
@return [Array<Type>] contained member types.
@return [String] the signature type character, eg “s” or “e”.
Public Class Methods
Use {DBus.type} instead, because this allows constructing incomplete or invalid types, for backward compatibility.
@param abstract [Boolean] allow abstract types “r” and “e”
(Enabled for internal usage by {Parser}.)
# File lib/dbus/type.rb 84 def initialize(sigtype, abstract: false) 85 if !TYPE_MAPPING.keys.member?(sigtype) 86 case sigtype 87 when ")" 88 raise SignatureException, "STRUCT unexpectedly closed: )" 89 when "}" 90 raise SignatureException, "DICT_ENTRY unexpectedly closed: }" 91 else 92 raise SignatureException, "Unknown type code #{sigtype.inspect}" 93 end 94 end 95 96 unless abstract 97 case sigtype 98 when STRUCT 99 raise SignatureException, "Abstract STRUCT, use \"(...)\" instead of \"#{STRUCT}\"" 100 when DICT_ENTRY 101 raise SignatureException, "Abstract DICT_ENTRY, use \"{..}\" instead of \"#{DICT_ENTRY}\"" 102 end 103 end 104 105 @sigtype = sigtype.freeze 106 @members = [] # not frozen yet, Parser#parse_one or Factory will do it 107 freeze 108 end
Public Instance Methods
Add a new member type item. @param item [Type]
# File lib/dbus/type.rb 155 def <<(item) 156 raise ArgumentError unless item.is_a?(Type) 157 158 if ![STRUCT, ARRAY, DICT_ENTRY].member?(@sigtype) 159 raise SignatureException 160 end 161 raise SignatureException if @sigtype == ARRAY && !@members.empty? 162 163 if @sigtype == DICT_ENTRY 164 case @members.size 165 when 2 166 raise SignatureException, 167 "DICT_ENTRY must have 2 subtypes, found 3 or more: #{@members.inspect} << #{item.inspect}" 168 when 0 169 if [STRUCT, ARRAY, DICT_ENTRY, VARIANT].member?(item.sigtype) 170 raise SignatureException, "DICT_ENTRY key must be basic (non-container)" 171 end 172 end 173 end 174 @members << item 175 end
Return the required alignment for the type.
# File lib/dbus/type.rb 134 def alignment 135 TYPE_MAPPING[@sigtype].last 136 end
Return the first contained member type.
# File lib/dbus/type.rb 178 def child 179 @members[0] 180 end
A Type is eql? to
-
another
Typewith the same string representation
Hash key equality See ruby-doc.org/core-3.0.0/Object.html#method-i-eql-3F
# File lib/dbus/type.rb 127 def eql?(other) 128 return false unless other.is_a?(Type) 129 130 @sigtype == other.sigtype && @members == other.members 131 end
# File lib/dbus/type.rb 182 def inspect 183 s = TYPE_MAPPING[@sigtype].first 184 if [STRUCT, ARRAY, DICT_ENTRY].member?(@sigtype) 185 s += ": #{@members.inspect}" 186 end 187 s 188 end
Return a string representation of the type according to the D-Bus specification.
# File lib/dbus/type.rb 140 def to_s 141 case @sigtype 142 when STRUCT 143 "(#{@members.collect(&:to_s).join})" 144 when ARRAY 145 "a#{child}" 146 when DICT_ENTRY 147 "{#{@members.collect(&:to_s).join}}" 148 else 149 @sigtype.chr 150 end 151 end