Hello.
On 19/10/12 19:26, Lucas De Marchi wrote:
> On Fri, Oct 19, 2012 at 12:02 PM, Enlightenment SVN
> <[email protected]> wrote:
>>
>> msg = edbus_proxy_method_call_new(meta_geocode, "AddressToPosition");
>> iter = edbus_message_iter_get(msg);
>> - edbus_message_iter_arguments_set(iter, "a{ss}", &dict);
>>
>> - entry = edbus_message_iter_container_new(dict, 'e', "ss");
>> + array = edbus_message_iter_container_new(iter, 'a', "{ss}");
>>
>> - edbus_message_iter_arguments_set(entry, "ss", "country",
>> address_shadow->country);
>
> humn... I'm checking with José if it would be possible to do something
> as you had before.
Cool. In general a bit more glue code to ease the marshal and unmarshal
might be worth a thought. I found it a bit cumbersome to do all this
container and iter business. Maybe I'm just lazy. :)
>
>> - edbus_message_iter_arguments_set(entry, "ss", "countrycode",
>> address_shadow->countrycode);
>> - edbus_message_iter_arguments_set(entry, "ss", "locality",
>> address_shadow->locality);
>> - edbus_message_iter_arguments_set(entry, "ss", "postalcode",
>> address_shadow->postalcode);
>> - edbus_message_iter_arguments_set(entry, "ss", "region",
>> address_shadow->region);
>> - edbus_message_iter_arguments_set(entry, "ss", "timezone",
>> address_shadow->timezone);
>> + if (address_shadow->country)
>> + {
>> + entry = edbus_message_iter_container_new(array, 'e', NULL);
>> + edbus_message_iter_arguments_set(entry, "ss", "country",
>> address_shadow->country);
>> + edbus_message_iter_container_close(array, entry);
>> + }
>>
>> - edbus_message_iter_container_close(dict, entry);
>> - edbus_message_iter_container_close(iter, dict);
>> + if (address_shadow->countrycode)
>> + {
>> + entry = edbus_message_iter_container_new(array, 'e', NULL);
>> + edbus_message_iter_arguments_set(entry, "ss", "countrycode",
>> address_shadow->countrycode);
>> + edbus_message_iter_container_close(array, entry);
>> + }
>> +
>> + if (address_shadow->locality)
>> + {
>> + entry = edbus_message_iter_container_new(array, 'e', NULL);
>> + edbus_message_iter_arguments_set(entry, "ss", "locality",
>> address_shadow->locality);
>> + edbus_message_iter_container_close(array, entry);
>> + }
>> +
>> + if (address_shadow->postalcode)
>> + {
>> + entry = edbus_message_iter_container_new(array, 'e', NULL);
>> + edbus_message_iter_arguments_set(entry, "ss", "postalcode",
>> address_shadow->postalcode);
>> + edbus_message_iter_container_close(array, entry);
>> + }
>> +
>> + if (address_shadow->region)
>> + {
>> + entry = edbus_message_iter_container_new(array, 'e', NULL);
>> + edbus_message_iter_arguments_set(entry, "ss", "region",
>> address_shadow->region);
>> + edbus_message_iter_container_close(array, entry);
>> + }
>> +
>> + if (address_shadow->timezone)
>> + {
>> + entry = edbus_message_iter_container_new(array, 'e', NULL);
>> + edbus_message_iter_arguments_set(entry, "ss", "timezone",
>> address_shadow->timezone);
>> + edbus_message_iter_container_close(array, entry);
>> + }
>> +
>> + edbus_message_iter_container_close(iter, array);
>> +
>
> Meanwhile, you might want to do something like below (untested):
>
> #define ENTRY(key) { #key, address_shadow->##key }
> struct keyval {
> const char *key;
> const char *val;
> } keyval[] = {
> ENTRY(country),
> ENTRY(countrycode),
> ENTRY(locality),
> ENTRY(postalcode),
> ENTRY(region),
> { }
> };
> #undef ENTRY
>
> for (k = keyval; k && k->key; k++)
> {
> EDBus_Message_Iter *entry;
>
> if (!k->val)
> continue;
>
> entry = edbus_message_iter_container_new(array, 'e', NULL);
> edbus_message_iter_arguments_set(entry, "ss", k->key, k->val);
> edbus_message_iter_container_close(array, entry);
> }
> edbus_message_iter_container_close(iter, array);
I'm not such a big fan of having such macros but this one looked nice
enough. I fixed it up and added it. Thanks.
regards
Stefan Schmidt
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel