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

Reply via email to