Proposal: user defined attributes

Andrej Mitrovic andrej.mitrovich at gmail.com
Mon Mar 19 13:44:33 PDT 2012


On 3/19/12, Jacob Carlborg <doob at me.com> wrote:
> * Can be repeated on several fields (with the mixin you can only mixin
> "NonSerialized" once)

When I implemented NonSerialized for Vladimir's json library he made a
suggestion to simply create enums of each field that is not to be
serialized and encode it as "fieldname_nonSerialized". That would
enable using a NonSerialized mixin multiple times.

I've yet to implement it in that way, I ran into some odd bugs but
I'll have a look at this soon. My implementation used a hash lookup
table for the fields, but using enums would make the code even
simpler. Basically:

struct Foo
{
    int x;
    string name;
    mixin(NonSerialized!name);
    string lastName;
    mixin(NonSerialized!lastName);
}

and this would expand to:
struct Foo
{
    int x;
    string name;
    enum name_nonSerialized;
    string lastName;
    enum lastName_nonSerialized;
}

So all you'd have to do is use compile-time introspection and a little
bit of string processing to figure out if a field should be serialized
or not.


More information about the Digitalmars-d mailing list