Note: This website is archived. For up-to-date information about D projects and development, please visit wiki.dlang.org.

root/orange/serialization/Serializable.d

Revision 39:301476d40518, 1.4 kB (checked in by Jacob Carlborg <doob@me.com>, 13 years ago)

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

Line 
1 /**
2  * Copyright: Copyright (c) 2010 Jacob Carlborg.
3  * Authors: Jacob Carlborg
4  * Version: Initial created: Jan 26, 2010
5  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
6  */
7 module orange.serialization.Serializable;
8
9 import orange.serialization.archives.Archive;
10 import orange.serialization.Events;
11 import orange.serialization.Serializer;
12 import orange.util.CTFE;
13
14 interface Serializable
15 {
16     void toData (Serializer serializer, Serializer.Data key);
17     void fromData (Serializer serializer, Serializer.Data key);
18 }
19
20 template isSerializable (T)
21 {
22     const isSerializable = is(T : Serializable) || (
23         is(typeof(T.toData(Serializer.init, Serializer.Data.init))) &&
24         is(typeof(T.fromData(Serializer.init, Serializer.Data.init))));
25 }
26
27 template NonSerialized (alias field)
28 {
29     NonSerializedField!(field) __nonSerialized;
30 }
31
32 struct NonSerializedField (alias f)
33 {
34     const field = f.stringof;
35 }
36
37 package:
38
39 version (Tango)
40 {
41     const nonSerializedField = "__nonSerialized";
42     const serializedField = "__serialized";
43     const internalFields = [nonSerializedField[], onDeserializedField, onDeserializingField, onSerializedField, onSerializingField];
44 }
45
46 else
47 {
48     mixin(
49     `enum nonSerializedField = "__nonSerialized";
50     enum serializedField = "__serialized";
51     enum internalFields = [nonSerializedField[], onDeserializedField, onDeserializingField, onSerializedField, onSerializingField];`);
52 }
Note: See TracBrowser for help on using the browser.