~jpsamaroo/DBus.jl

74515d43c86aeba9c08bf7df52f4558cfcf5bb9d — Julian P Samaroo 1 year, 22 days ago db56b5e
message: Support Variant read/write
2 files changed, 24 insertions(+), 0 deletions(-)

M src/DBus.jl
M src/message.jl
M src/DBus.jl => src/DBus.jl +12 -0
@@ 147,6 147,12 @@ function message_iter_write!(iter, arg::ObjectPath)
end
message_iter_write!(iter, arg::T) where {T<:Integer} =
    dbus_message_iter_append_basic(iter, dbus_type(T), Ref(arg))
function message_iter_write!(iter, arg::Ref{T}) where T
    var_iter = Ref{DBusMessageIter}()
    dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, dbus_spec(T), var_iter)
    message_iter_write!(var_iter, arg[])
    dbus_message_iter_close_container(iter, var_iter)
end

function message_read(msg)
    iter = Ref{DBusMessageIter}()


@@ 174,6 180,12 @@ message_iter_read(::Type{ObjectPath}, iter) =
    ObjectPath(dbus_message_iter_get_basic(iter, String))
message_iter_read(::Type{T}, iter) where {T<:Integer} =
    dbus_message_iter_get_basic(iter, T)
function message_iter_read(::Type{Ref}, iter)
    var_iter = Ref{DBusMessageIter}()
    dbus_message_iter_recurse(iter, var_iter)
    S = dbus_message_iter_get_arg_type(var_iter)
    return message_iter_read(julia_type(S), var_iter)
end

function send_recv!(conn, target, object, interface, method, args)
    pending = Ref{Ptr{DBusPendingCall}}(Ptr{DBusPendingCall}(0))

M src/message.jl => src/message.jl +12 -0
@@ 2,6 2,18 @@ function dbus_message_iter_init(msg, iter)
    ccall((:dbus_message_iter_init, libdbus),
          Bool, (Ptr{DBusMessage}, Ptr{DBusMessageIter},), msg, iter)
end
function dbus_message_iter_recurse(iter, sub)
    ccall((:dbus_message_iter_recurse, libdbus),
          Cvoid, (Ptr{DBusMessageIter}, Ptr{DBusMessageIter},), iter, sub)
end
function dbus_message_iter_next(iter)
    ccall((:dbus_message_iter_next, libdbus),
          Bool, (Ptr{DBusMessageIter},), iter)
end
function dbus_message_iter_has_next(iter)
    ccall((:dbus_message_iter_has_next, libdbus),
          Bool, (Ptr{DBusMessageIter},), iter)
end
function dbus_message_iter_init_append(msg, iter)
    ccall((:dbus_message_iter_init_append, libdbus),
          Bool,