Mercurial > projects > orange
view orange/serialization/Serializable.d @ 39:301476d40518
Made a couple of refactorings:
* Removed Serializable
* Added a Serializable interface
* Moved isSerializable and updated the implementation
* Added new deserialize methods for deserialize without data during deserializing
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Thu, 04 Aug 2011 21:29:56 +0200 |
parents | 511d1ef4e299 |
children |
line wrap: on
line source
/** * Copyright: Copyright (c) 2010 Jacob Carlborg. * Authors: Jacob Carlborg * Version: Initial created: Jan 26, 2010 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) */ module orange.serialization.Serializable; import orange.serialization.archives.Archive; import orange.serialization.Events; import orange.serialization.Serializer; import orange.util.CTFE; interface Serializable { void toData (Serializer serializer, Serializer.Data key); void fromData (Serializer serializer, Serializer.Data key); } template isSerializable (T) { const isSerializable = is(T : Serializable) || ( is(typeof(T.toData(Serializer.init, Serializer.Data.init))) && is(typeof(T.fromData(Serializer.init, Serializer.Data.init)))); } template NonSerialized (alias field) { NonSerializedField!(field) __nonSerialized; } struct NonSerializedField (alias f) { const field = f.stringof; } package: version (Tango) { const nonSerializedField = "__nonSerialized"; const serializedField = "__serialized"; const internalFields = [nonSerializedField[], onDeserializedField, onDeserializingField, onSerializedField, onSerializingField]; } else { mixin( `enum nonSerializedField = "__nonSerialized"; enum serializedField = "__serialized"; enum internalFields = [nonSerializedField[], onDeserializedField, onDeserializingField, onSerializedField, onSerializingField];`); }