class DBus::Data::Struct
A fixed size, heterogenerous tuple.
(The item count is fixed, not the byte size.)
Public Class Methods
alignment()
click to toggle source
# File lib/dbus/data.rb, line 627 def self.alignment 8 end
from_items(value, mode:, type:)
click to toggle source
@param value [::Array]
# File lib/dbus/data.rb, line 632 def self.from_items(value, mode:, type:) value.freeze return value if mode == :plain new(value, type: type) end
from_typed(value, type:)
click to toggle source
@param value [::Object] (#size, each) @param type [Type] @return [Struct]
# File lib/dbus/data.rb, line 642 def self.from_typed(value, type:) new(value, type: type) end
new(value, type:)
click to toggle source
@param value [Data::Struct,Enumerable] @param type [SingleCompleteType,Type]
Calls superclass method
DBus::Data::Base.new
# File lib/dbus/data.rb, line 648 def initialize(value, type:) type = Type::Factory.make_type(type) self.class.assert_type_matches_class(type) @type = type typed_value = case value when self.class unless value.type == type raise ArgumentError, "Specified type is #{type.inspect} but value type is #{value.type.inspect}" end value.exact_value else member_types = type.members unless value.size == member_types.size raise ArgumentError, "Specified type has #{member_types.size} members " \ "but value has #{value.size} members" end member_types.zip(value).map do |item_type, item| Data.make_typed(item_type, item) end end super(typed_value) end
type_code()
click to toggle source
# File lib/dbus/data.rb, line 623 def self.type_code "r" end
Public Instance Methods
==(other)
click to toggle source
Calls superclass method
DBus::Data::Base#==
# File lib/dbus/data.rb, line 675 def ==(other) case other when ::Struct @value.size == other.size && @value.zip(other.to_a).all? { |i, other_i| i == other_i } else super end end