-
Notifications
You must be signed in to change notification settings - Fork 134
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Codegen: structs with more than 12 items #488
Comments
Because I am actually not sure of the issue origin, here is the error I have
|
I changed the subject of the issue because after a cargo tree, it seems that I have the version 0.9.7 of dbus used by crossroads.. 12 arguments are okay, but 13 are not. |
Okay found it : https://github.com/diwic/dbus-rs/blob/master/dbus/src/arg/variantstruct_impl.rs We should have as well more arguments here. I tried to repeat some more struct_impl, but it seems stucked:
|
It is indeed a limit in std that Debug is only able to do up to twelve items: https://doc.rust-lang.org/std/fmt/trait.Debug.html |
I've added a commit in dbus-codegen causing us not to try to return invalid rust types but to fall back to If not, could you supply the xml file to test with? |
Related commit that might help: cabf790 |
Thank you for your quick answer! I have to compile dbus-codegen from main branch right? I'll give you a feedback on Monday |
Both dbus and dbus-codegen need to be the version from the master branch since I added two commits to dbus as well. |
Thank you for your time ! I just made some and have still some bugs:
I have the following error message:
Here is a minimal XML example <?xml version="1.0" encoding="UTF-8"?>
<node xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
<interface name="com.dbus.example">
<method name="GetTrucDetails">
<arg type="(yqttqtqtqtqsqqqqt)" direction="out" name="trucDetails">
<doc:doc>
<doc:summary>
<doc:para>Type de donnée.</doc:para>
<doc:list>
<doc:item>
<doc:term>techno</doc:term>
<doc:definition>BYTE
<doc:para>Les valeurs possibles sont les suivantes :
<doc:list>
<doc:item>
<doc:term>1</doc:term>
<doc:definition>UN</doc:definition>
</doc:item>
<doc:item>
<doc:term>2</doc:term>
<doc:definition>DEUX</doc:definition>
</doc:item>
<doc:item>
<doc:term>3</doc:term>
<doc:definition>TROIS</doc:definition>
</doc:item>
<doc:item>
<doc:term>4</doc:term>
<doc:definition>QUATRE</doc:definition>
</doc:item>
<doc:item>
<doc:term>5</doc:term>
<doc:definition>CINQ</doc:definition>
</doc:item>
<doc:item>
<doc:term>6</doc:term>
<doc:definition>SIX</doc:definition>
</doc:item>
<doc:item>
<doc:term>7</doc:term>
<doc:definition>SEPT</doc:definition>
</doc:item>
<doc:item>
<doc:term>8</doc:term>
<doc:definition>HUIT</doc:definition>
</doc:item>
<doc:item>
<doc:term>9</doc:term>
<doc:definition>NEUF</doc:definition>
</doc:item>
<doc:item>
<doc:term>10</doc:term>
<doc:definition>DIX</doc:definition>
</doc:item>
</doc:list>
</doc:para>
</doc:definition>
</doc:item>
<doc:item>
<doc:term>TEST</doc:term>
<doc:definition>UINT16 : numero.</doc:definition>
</doc:item>
<doc:item>
<doc:term>ahqueoui</doc:term>
<doc:definition>BYTE
<doc:para>Niveau de truc :
<doc:list>
<doc:item>
<doc:term>0</doc:term>
<doc:definition>Quelque chose</doc:definition>
</doc:item>
<doc:item>
<doc:term>1</doc:term>
<doc:definition>Quelque chose</doc:definition>
</doc:item>
<doc:item>
<doc:term>2 à 30</doc:term>
<doc:definition>Quelque chose</doc:definition>
</doc:item>
<doc:item>
<doc:term>31</doc:term>
<doc:definition>Quelque chose</doc:definition>
</doc:item>
<doc:item>
<doc:term>99</doc:term>
<doc:definition>Quelque chose</doc:definition>
</doc:item>
</doc:list>
</doc:para>
</doc:definition>
</doc:item>
<doc:item>
<doc:term>bahouient</doc:term>
<doc:definition>BYTE
<doc:para>Tauxdetruc
<doc:list>
<doc:item>
<doc:term>0 à 7</doc:term>
<doc:definition>eh oui</doc:definition>
</doc:item>
<doc:item>
<doc:term>99</doc:term>
<doc:definition>eh non</doc:definition>
</doc:item>
</doc:list>
</doc:para>
</doc:definition>
</doc:item>
<doc:item>
<doc:term>machintruc</doc:term>
<doc:definition>UINT16 : toujours pas.</doc:definition>
</doc:item>
<doc:item>
<doc:term>pouetpouet</doc:term>
<doc:definition>BYTE
<doc:para>oh non
<doc:list>
<doc:item>
<doc:term>0</doc:term>
<doc:definition>zero</doc:definition>
</doc:item>
<doc:item>
<doc:term>1</doc:term>
<doc:definition>un</doc:definition>
</doc:item>
<doc:item>
<doc:term>2</doc:term>
<doc:definition>deux</doc:definition>
</doc:item>
<doc:item>
<doc:term>3</doc:term>
<doc:definition>trois</doc:definition>
</doc:item>
<doc:item>
<doc:term>4</doc:term>
<doc:definition>quatre</doc:definition>
</doc:item>
<doc:item>
<doc:term>5</doc:term>
<doc:definition>cinq</doc:definition>
</doc:item>
<doc:item>
<doc:term>6</doc:term>
<doc:definition>six</doc:definition>
</doc:item>
<doc:item>
<doc:term>7</doc:term>
<doc:definition>sept</doc:definition>
</doc:item>
</doc:list>
</doc:para>
</doc:definition>
</doc:item>
<doc:item>
<doc:term>pouetencore</doc:term>
<doc:definition>UINT16 : autre chose</doc:definition>
</doc:item>
<doc:item>
<doc:term>hahahah</doc:term>
<doc:definition>BYTE
<doc:para>alors oui mais non
<doc:list>
<doc:item>
<doc:term>0</doc:term>
<doc:definition> encore du travail</doc:definition>
</doc:item>
<doc:item>
<doc:term>1</doc:term>
<doc:definition>un</doc:definition>
</doc:item>
<doc:item>
<doc:term>2 à 48</doc:term>
<doc:definition>beaucoup</doc:definition>
</doc:item>
<doc:item>
<doc:term>49</doc:term>
<doc:definition>douze</doc:definition>
</doc:item>
<doc:item>
<doc:term>255</doc:term>
<doc:definition>soixante</doc:definition>
</doc:item>
</doc:list>
</doc:para>
</doc:definition>
</doc:item>
<doc:item>
<doc:term>bababab</doc:term>
<doc:definition>UINT16 : ah ca avance</doc:definition><!--TODO: voir le type ? -->
</doc:item>
<doc:item>
<doc:term>tjrspa</doc:term>
<doc:definition>BYTE
<doc:para>on est la
<doc:list>
<doc:item>
<doc:term>0</doc:term>
<doc:definition>quelquechose</doc:definition>
</doc:item>
<doc:item>
<doc:term>1 à 33</doc:term>
<doc:definition>ah peutetre que non</doc:definition>
</doc:item>
<doc:item>
<doc:term>34</doc:term>
<doc:definition>ya moyen</doc:definition>
</doc:item>
</doc:list>
</doc:para>
</doc:definition>
</doc:item>
<doc:item>
<doc:term>badabadou</doc:term>
<doc:definition>UINT16 : Pas content.</doc:definition><!--TODO: voir le type ? -->
</doc:item>
<doc:item>
<doc:term>badabadi</doc:term>
<doc:definition>STRING : Pas content </doc:definition>
</doc:item>
<doc:item>
<doc:term>badaaa</doc:term>
<doc:definition>UINT16 : Pas content.</doc:definition><!--TODO: voir le type ? -->
</doc:item>
<doc:item>
<doc:term>babdddd</doc:term>
<doc:definition>UNINT16 : Pas content.</doc:definition><!--TODO: voir le type ? -->
</doc:item>
<doc:item>
<doc:term>mamamia</doc:term>
<doc:definition>UINT16 : Pas content.</doc:definition><!--TODO: voir le type ? -->
</doc:item>
<doc:item>
<doc:term>ahbahlechocolat</doc:term>
<doc:definition>UINT16 : Pas content.</doc:definition><!--TODO: voir le type ? -->
</doc:item>
<doc:item>
<doc:term>salutsalut</doc:term>
<doc:definition>UINT64 : Pas content</doc:definition>
</doc:item>
</doc:list>
</doc:summary>
</doc:doc>
</arg>
</method>
</interface>
</node> |
(just so you know: i did change the xml interface in multiple args so I don't have the problem anymore, but if ever someone has the problem) |
Thanks. So the issue is not more than 12 arguments in a method call - we support that, it's a struct with more than 12 items. What's needed is for codegen to resolve this, is to generate a custom type, and then implement Arg, Append and Get for that custom struct. Until somebody implements that, there is a workaround which is to use your own type, like this:
...and then implement |
I have a method that exceeds 12 args in a XML file.
I used the codegen to generate a file that uses crossroads.
Though, my method has 18 args, and tells that is does not implement AppendAll.
This is quite similar though to the closed issue here : #310 but I saw in the [email protected] that this is fixed until 26 args, why doesn't it work?
I saw that crossroads uses the version 0.9.3 of dbus, and it makes my code break. Could you update the dependency?
Thank you for your hard work, please have a great day
The text was updated successfully, but these errors were encountered: