On Thu, 29 Sep 2011 14:58:30 -0400, Jacob Carlborg <[email protected]> wrote:
I would like to have some form of pre-review of my serialization library
Orange for later inclusion in Phobos as std.serialization (or similar).

[snip]

This is a quick note on the API design; I'm planning on doing a deeper review 
of the code + API later.

Re: registerSerializer
Type.stringof is not unique and can't be used by your serializer. Furthermore, 
allowing users to manually set the lookup string is going to be a major source 
of silent errors / bugs and exposes a large portions of your internals. Doing 
it in this way prevents you from updating how the back-end looks up types.

I'd recommend using: typeid(A).toString internally instead as this is unique 
and registerSerializer's API to

void registerSerializer(Derived,Base)(void delegate(Base) dg) if( 
is(Derived:Base) ) {}

which would be called via:

registerSerializer!Foo(dg);


The method should also be static: If I'm registering a custom serialization method, I 
don't want to duplicate that mapping everywhere a serializer is instanced. I don't 
even want to duplicate it for every type of serializer. I think there needs to be 
some granularity for this: i.e. instance -> type -> global.

Also, repeat the above for registerDeserializer.


Re: deserialize some of the example don't look like they're correct.

Reply via email to