lib/dbus/marshall.rb in ruby-dbus-0.18.0.beta4 vs lib/dbus/marshall.rb in ruby-dbus-0.18.0.beta5
- old
+ new
@@ -116,11 +116,11 @@
case signature.sigtype
when Type::STRUCT, Type::DICT_ENTRY
values = signature.members.map do |child_sig|
do_parse(child_sig, mode: mode)
end
- packet = data_class.from_items(values, mode: mode, member_types: signature.members)
+ packet = data_class.from_items(values, mode: mode, type: signature)
when Type::VARIANT
data_sig = do_parse(Data::Signature.type, mode: :exact) # -> Data::Signature
types = Type::Parser.new(data_sig.value).parse # -> Array<Type>
unless types.size == 1
@@ -145,11 +145,11 @@
while @raw_msg.pos < end_pos
item = do_parse(signature.child, mode: mode)
items << item
end
is_hash = signature.child.sigtype == Type::DICT_ENTRY
- packet = data_class.from_items(items, mode: mode, member_type: signature.child, hash: is_hash)
+ packet = data_class.from_items(items, mode: mode, type: signature, hash: is_hash)
end
end
packet
end
end
@@ -280,11 +280,14 @@
end
end
def append_variant(val)
vartype = nil
- if val.is_a?(DBus::Data::Base)
- vartype = val.type # FIXME: box or unbox another variant?
+ if val.is_a?(DBus::Data::Variant)
+ vartype = val.member_type
+ vardata = val.value
+ elsif val.is_a?(DBus::Data::Base)
+ vartype = val.type
vardata = val.value
elsif val.is_a?(Array) && val.size == 2
case val[0]
when Type
vartype, vardata = val