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