Re: DBus and Moose

[email protected] (Tobias Nissen)
Newsgroups perl.moose
Message-ID <[email protected]>
Nick Perez wrote:
> Well, it is Moose and you seem to be using either MooseX::Declare or
> MooseX::Method::Signatures. This means good things for you. You could,
> on import, merely interrogate your own class, iterate the methods and
> call dbus_method() with the necessary parameters.

OK, I played around some more and I think I know how to do it in
theory. The really hard part will be the unification between Moose
and dbus types.

[...]
>         # assumes MXMS since it wraps methods to provide signatures
>         my $signature = $method->signature;
>         my $return = $method->return_signature;
>         
>         # You need to parse out the signature. Look inside MXMS for this
>         # Also, this is lots of hand waving. Consider this pseudocode
>         dbus_method($method->name, $signature, $return);
[...]

The dbus typesystem knows no classes, only some basic types (string,
int, ...) and compound types (array, dict and struct)¹.

With that in mind, how does one translate the attributes of complex
Moose objects into these simple types? For a simple class with
declarations like

   has 'y' => (is => 'rw', isa => 'Int');
   has 'z' => (is => 'rw', isa => 'Str');

I could go through the classes' attributes and construct a dbus type
like

  ["struct", "int", "string"]

But y and z could also have more complex data types, even with
circular references (type-wise), so a general solution for MXMS (or
Moose for that matter) can not exist (am I right?). Also I'm not sure
how to interpret the "returns" feature only working "with scalar
return values and [still being] considered to be experimental."²

Could the solution be to create a trait, that, when consumed, prevents
creation of objects too complex to translate into a dbus type?

I am *very* new to Moose. If some of what I said doesn't make sense,
that is why :-)

TIA,
Tobias


________
¹ http://search.cpan.org/~danberr/Net-DBus-1.0.0/lib/Net/DBus/Exporter.pm#SCALAR_TYPES
  and #COMPOUND_TYPES respectively
² http://search.cpan.org/~flora/MooseX-Method-Signatures-0.36/lib/MooseX/Method/Signatures.pm#What_about_the_return_value?


[...]
> On Thu, 25 Aug 2011 10:32:30 +0200
> Tobias Nissen <[email protected]> wrote:
> 
> > Hi,
> > 
> > I just managed to write a Moose class that extends Net::DBus::Object
> > (using MooseX::NonMoose). Now I end up with a lot of code like this:
> > 
> >   dbus_method("Hello", ["string"], ["string"]);
> >   method Hello(Str $name) returns (Str) { ... }
> > 
> > Let's say I knew that all my DBus types were 1:1 mappable to Moose
> > types, what would I have to do to get rid of that "double" method
> > declaration?¹
> > 
> > Do you know of code out there that I could study and that would help
> > me on my task of writing a DBus application using Moose?
> > 
> > TIA,
> > Tobias
> > 
> > ¹ dbus_method() comes from Net::DBus::Exporter and is used to export
> >   methods on the (D-)bus
signature.asc (application/pgp-signature, 198 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iEYEARECAAYFAk5YOzkACgkQ5jrP7hWxSO9nTgCgnnikuUeRq9fvR40WTMwIKDn9
euQAoL4iN+GKUVgjUAoAk8S0dvXyqdFH
=aYYS
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.