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 628 def self.alignment 629 8 630 end
from_items(value, mode:, type:)
click to toggle source
@param value [::Array]
# File lib/dbus/data.rb 633 def self.from_items(value, mode:, type:) 634 value.freeze 635 return value if mode == :plain 636 637 new(value, type: type) 638 end
from_typed(value, type:)
click to toggle source
@param value [::Object] (size, each) @param type [Type] @return [Struct]
# File lib/dbus/data.rb 643 def self.from_typed(value, type:) 644 new(value, type: type) 645 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 649 def initialize(value, type:) 650 type = Type::Factory.make_type(type) 651 self.class.assert_type_matches_class(type) 652 @type = type 653 654 typed_value = case value 655 when self.class 656 unless value.type == type 657 raise ArgumentError, 658 "Specified type is #{type.inspect} but value type is #{value.type.inspect}" 659 end 660 661 value.exact_value 662 else 663 member_types = type.members 664 unless value.size == member_types.size 665 raise ArgumentError, "Specified type has #{member_types.size} members " \ 666 "but value has #{value.size} members" 667 end 668 669 member_types.zip(value).map do |item_type, item| 670 Data.make_typed(item_type, item) 671 end 672 end 673 super(typed_value) 674 end
type_code()
click to toggle source
# File lib/dbus/data.rb 624 def self.type_code 625 "r" 626 end
Public Instance Methods
==(other)
click to toggle source
Calls superclass method
DBus::Data::Base#==
# File lib/dbus/data.rb 676 def ==(other) 677 case other 678 when ::Struct 679 @value.size == other.size && 680 @value.zip(other.to_a).all? { |i, other_i| i == other_i } 681 else 682 super 683 end 684 end