Home

Awesome

Deprecation Notice

This project has been deprecated in favor of lua-dbus_proxy. It is unlikely that this project will be updated in future.

If someone would like to maintain the project, please contact me.

Description

A high level DBus API for Lua built on top of the ldbus library.

DBus data representation:

DBus data is typed, this is mapped in a Lua table with the following shape:

dbus_data = {
     sig = <DBus signature>,
     value = <Lua type>
   }

Basic types

Int32 and other numbers

All DBus numeric types map to Lua numbers. For example:

   {
     sig = ldbus.basic_types.int32, -- i.e. "i"
     value = 256
   }

Boolean

   {
     sig = ldbus.basic_types.boolean, -- i.e. "b"
     value = false
   }

Container types

Variant

   {
       sig = ldbus.types.variant, -- i.e. "v"
       value = <DBus data>
   }

example:

   {
       sig = ldbus.types.variant,
       value = {
                   sig = ldbus.basic_types.uint32,
                   value = 4294967295
                }
   }

Array

A DBus array is an homogeneous Lua array, i.e. an array whose elements are of the same type.

   {
     sig = ldbus.types.array .. <contents signature>,
     value = {<contents>} -- homogeneous array
   }

examples:

   {
     sig = "ai", -- i.e. array of int32
     value = {1, 2, 3, 4, 5, 6}
   }

   {
     sig = "aas", -- i.e. array of arrays of strings
     value = {{"a", "b"}, {"c", "d"}, {"e"}}
   }

Dictionary (Array of Dict Entries)

   {
     sig = ldbus.types.array .. "{" .. <key type> <value type> .. "}",
     value = { <key1> = <value1>, <key2> = <value2>}
   }

examples:

   {
     sig = "a{ss}"
     value = {a = "A", b = "B", c = "C"}
   }

   {
     sig = "a{sa{si}}", -- nested dictionary
     value = {outer1 = {inner1 = 1}, outer2 = {inner2 = 2}}
   }

Struct

  {
    sig = "(" .. <type1> .. <type2> .. <type3> [...] .. ")",
    value = { <value1>, <value2>, <value3>, [...]} -- heterogeneous array
  }

examples:

  {
    sig = "(ibs)",
    value = { 1, true, "hello Lua!"}
  }

  {
    sig = "(ia{si}s)",
    value = {1, {one = 5, two = 6, three = 7}, "hello Lua!"}
  }

Generating the documentation

You will need ldoc to generate the documentation. Once it's installed, you can run ldoc . from the project's directory (i.e. where config.ld is located). The command will generate HTML documentation in the docs folder.