[prev in list] [next in list] [prev in thread] [next in thread]
List: freedesktop-dbus
Subject: D-Bus Introspection: pure data structure representation
From: Felipe Gasper <felipe () felipegasper ! com>
Date: 2019-05-17 16:03:26
Message-ID: 41AFAE34-69D9-4D73-9EEE-8DCD99892699 () felipegasper ! com
[Download RAW message or body]
Hi all,
Sometime back I came up with a schema for representing a D-Bus interface as a pure \
data structure rather than as an XML document. This would allow applications to \
interface with D-Bus without needing to load XML libraries, which seem to be in \
progressively less use nowadays as formats such as JSON have become predominant.
Here is an example interface description, using JSON:
-----
{
"name" : "MyInterface",
"annotations" : {
"if_foo" : "bar"
},
"methods" : {
"MyMethod" : {
"annotations" : {
"meth_baz" : "bar",
"meth_foo" : "bar"
},
"inputs" : [
{
"annotations" : {
"input_baz" : "bar",
"input_foo" : "bar"
},
"name" : "haha",
"type" : "s"
},
{
"annotations" : {},
"name" : "hoho",
"type" : "s"
},
{
"name" : "hehe",
"type" : "s"
}
],
"outputs" : [
{
"annotations" : {
"output_foo" : "bar"
},
"name" : "haha",
"type" : "s"
},
{
"annotations" : {},
"name" : "hoho",
"type" : "s"
},
{
"name" : "hehe",
"type" : "s"
}
]
}
},
"properties" : {
"propOne" : {
"access" : "read",
"annotations" : {
"prop_baz" : "bar",
"prop_foo" : "bar"
},
"type" : "as"
},
"propThree" : {
"access" : "read",
"annotations" : {},
"type" : "as"
},
"propTwo" : {
"access" : "read",
"type" : "as"
}
},
"signals" : {
"MySignal" : {
"annotations" : {
"sig_foo" : "bar"
},
"parameters" : [
{
"annotations" : {
"parm_foo" : "bar"
},
"name" : "haha",
"type" : "s"
}
]
}
}
}
-----
Note that I've separated method inputs/outputs into separate lists rather than \
keeping them together as a single list. I'm not opposed to combining them as the \
standard XML representation does, but I just think it's much easier to understand \
when they're in separate lists.
This would seem simple enough to implement by adding a new method, e.g., \
"IntrospectAsStruct", in the Introspectable interface, with a single parameter that \
gives the serialization format (e.g., JSON, YAML, CBOR, MessagePack, Sereal, …) to \
use. It would likely also be good to add a property, Serializations, that gives \
supported serializations, either as strings or as numerical constants.
So, e.g.,:
dbus-send --dest my.service /my/service \
org.freedesktop.DBus.Introspectable.IntrospectAsStruct format:json
… would return a JSON string.
What are folks' thoughts here? I feel like XML is an increasingly obscure and \
unnecessary stumbling block to use of D-Bus's introspection.
Thank you for your time!
-Felipe Gasper
_______________________________________________
dbus mailing list
dbus@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dbus
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic