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];`);
}