[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#20193: 25.0.50; declarative type specification for D-Bus args
From: |
Michael Albinus |
Subject: |
bug#20193: 25.0.50; declarative type specification for D-Bus args |
Date: |
Fri, 04 Sep 2015 09:29:44 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) |
Daiki Ueno <ueno@gnu.org> writes:
Hi,
>> Well, dbus-test.el passes now, thanks. But there are still some cases
>> I'm not so happy with:
>>
>> plist-get
>> (dbus--test-create-message-with-args
>> '(:array)
>> '(:array :signature "u")
>> :type '(:array :uint32)
>> nil)
>> :signature)
>>
>> |- "asauau"
>>
>> I would expect "asauaub"
>
> Right, thanks for pointing that.
Thinking about, it seems to be OK. Ah :type keyword must always be
followed by two other arguments, and so it takes nil as the empty array
values, instead of a boolean false. Whether we allow to be sloppy, and
to add a missing nil as empty value list at the end of the arguments, is
something to be decided (and documented).
>> Maybe you could be a little bit more verbose about, and adapt the code?
>> When there is a :type argument, there must *always* be two additional
>> arguments?
>
> That makes sense.
As said above.
> Moreover, I personally prefer not to mix implicit and explicit typing.
> So, I am currently thinking to collect type specifiers for all
> arguments as a list and put it in front of the actual arguments, like
> this:
>
> (dbus-message-internal ...
> :timeout 100
> :type '((:array :string) (:array :uint32) (:array :uint32) :boolean)
> '("a") '(1) '(2) t)
>
> How does that sound?
I see two disadvantages:
- You couldn't use some functions any longer, like
(dbus-string-to-byte-array "Hello world") mixed with :type prefixed
arguments. Of course one could add a second function which returns
just the value list, but is it really helpful? It makes everything
more complex.
- You would loose the simplification of default types. A list is always
an array of strings, a string is a string, a natural number is a
uint32, and so on. You would be forced to write down the type
explicitely for every argument.
And we could simply use signatures then. Something like
(dbus-message-internal ...
:timeout 100
:type "asauaub"
'("a") '(1) '(2) t)
>> As you see, even I (who has tried to understand the new syntax) am a
>> little bit confused.
>
> Yes, I am realizing how helpful it is to write unit tests, to smoke out
> such pitfalls before landing the feature :-)
Yep. On my todo list is also to study the D-Bus tests at
<http://cgit.freedesktop.org/dbus/dbus-test/>. Maybe we could adapt
something from there.
> Regards,
Best regards, Michael.
bug#20193: 25.0.50; declarative type specification for D-Bus args, Stefan Monnier, 2015/09/03