diff --git a/src/dbus_fast/unpack.pxd b/src/dbus_fast/unpack.pxd index 3f996c3..7ab4670 100644 --- a/src/dbus_fast/unpack.pxd +++ b/src/dbus_fast/unpack.pxd @@ -4,3 +4,5 @@ import cython cpdef unpack_variants(object data) + +cdef _unpack_variants(object data) diff --git a/src/dbus_fast/unpack.py b/src/dbus_fast/unpack.py index ac2a140..d23426d 100644 --- a/src/dbus_fast/unpack.py +++ b/src/dbus_fast/unpack.py @@ -5,10 +5,14 @@ from .signature import Variant def unpack_variants(data: Any) -> Any: """Unpack variants and remove signature info.""" - if isinstance(data, Variant): - return unpack_variants(data.value) + return _unpack_variants(data) + + +def _unpack_variants(data: Any) -> Any: if isinstance(data, dict): - return {k: unpack_variants(v) for k, v in data.items()} + return {k: _unpack_variants(v) for k, v in data.items()} if isinstance(data, list): - return [unpack_variants(item) for item in data] + return [_unpack_variants(item) for item in data] + if isinstance(data, Variant): + return _unpack_variants(data.value) return data