rough dict type support for dbus pasted by mario-goulart on Wed Feb 8 18:59:02 2012

Index: dbus.scm
===================================================================
--- dbus.scm    (revision 25842)
+++ dbus.scm    (working copy)
@@ -89,6 +89,7 @@
 (define dbus:type-signature-string  (foreign-value DBUS_TYPE_SIGNATURE_AS_STRING int))
 (define dbus:type-array (foreign-value DBUS_TYPE_ARRAY int))
 (define dbus:type-array-string  (foreign-value DBUS_TYPE_ARRAY_AS_STRING int))
+(define dbus:type-dict  (foreign-value DBUS_TYPE_DICT_ENTRY int))
 
 (define dbus:make-context)
 (define dbus:send)
@@ -387,6 +388,8 @@
                                                C_return (ret);") iter)]
                                [(eq? type dbus:type-array)
                                        (iter->vector (make-sub-iter iter))]
+                               [(eq? type dbus:type-dict)
+                                       (iter->list (make-sub-iter iter))]
                                ;; unsupported so far (not understood well enough):
                                ;;      dbus:type-object-path and dbus:type-signature
                                ;; dbus:type-invalid is returned as #f (could be (void) but that

also variants and structs support pasted by mario-goulart on Wed Feb 8 19:16:58 2012

Index: dbus.scm
===================================================================
--- dbus.scm    (revision 25842)
+++ dbus.scm    (working copy)
@@ -89,6 +89,9 @@
 (define dbus:type-signature-string  (foreign-value DBUS_TYPE_SIGNATURE_AS_STRING int))
 (define dbus:type-array (foreign-value DBUS_TYPE_ARRAY int))
 (define dbus:type-array-string  (foreign-value DBUS_TYPE_ARRAY_AS_STRING int))
+(define dbus:type-dict  (foreign-value DBUS_TYPE_DICT_ENTRY int))
+(define dbus:type-struct (foreign-value DBUS_TYPE_STRUCT int))
+(define dbus:type-variant (foreign-value DBUS_TYPE_VARIANT int))
 
 (define dbus:make-context)
 (define dbus:send)
@@ -387,6 +390,8 @@
                                                C_return (ret);") iter)]
                                [(eq? type dbus:type-array)
                                        (iter->vector (make-sub-iter iter))]
+                               [(memq type (list dbus:type-dict dbus:type-struct dbus:type-variant))
+                                       (iter->list (make-sub-iter iter))]
                                ;; unsupported so far (not understood well enough):
                                ;;      dbus:type-object-path and dbus:type-signature
                                ;; dbus:type-invalid is returned as #f (could be (void) but that

unknown type type for dbus added by mario-goulart on Wed Feb 8 19:41:39 2012

Index: dbus.scm
===================================================================
--- dbus.scm    (revision 25842)
+++ dbus.scm    (working copy)
@@ -89,6 +89,9 @@
 (define dbus:type-signature-string  (foreign-value DBUS_TYPE_SIGNATURE_AS_STRING int))
 (define dbus:type-array (foreign-value DBUS_TYPE_ARRAY int))
 (define dbus:type-array-string  (foreign-value DBUS_TYPE_ARRAY_AS_STRING int))
+(define dbus:type-dict  (foreign-value DBUS_TYPE_DICT_ENTRY int))
+(define dbus:type-struct (foreign-value DBUS_TYPE_STRUCT int))
+(define dbus:type-variant (foreign-value DBUS_TYPE_VARIANT int))
 
 (define dbus:make-context)
 (define dbus:send)
@@ -125,6 +128,8 @@
 
 (define dbus:discover-api-xml)
 
+(define-record unknown-type)
+
 (define-external (C_msg_cb (dbus:bus bus) (message-ptr msg)) bool
        (let* ([cb (find-callback bus msg)][found (procedure? cb)])
                ; (printf "got a message: ~s on bus ~a and found callback ~s~%" msg bus cb)
@@ -387,11 +392,13 @@
                                                C_return (ret);") iter)]
                                [(eq? type dbus:type-array)
                                        (iter->vector (make-sub-iter iter))]
+                               [(memq type (list dbus:type-dict dbus:type-struct dbus:type-variant))
+                                       (iter->list (make-sub-iter iter))]
                                ;; unsupported so far (not understood well enough):
                                ;;      dbus:type-object-path and dbus:type-signature
                                ;; dbus:type-invalid is returned as #f (could be (void) but that
                                ;; would be the termination condition for the iterator)
-                               [else #f] )))
+                               [else (make-unknown-type)] )))
 
        (define (make-sub-iter iter)
                (let* ([sub ((foreign-lambda* message-iter-ptr ((message-iter-ptr iter))