1 module hunt.serialization.BinarySerializer;
2 
3 import std.array : Appender;
4 import std.traits;
5 import hunt.serialization.Specify;
6 
7 
8 /**
9  * 
10  */
11 struct BinarySerializer {
12     private {
13         Appender!(ubyte[]) _buffer;
14     }
15 
16     ubyte[] oArchive(T)(T val) if (!isArray!T && !isAssociativeArray!T) {
17         Unqual!T copy = val;
18         specify(this, copy);
19         return _buffer.data();
20     }
21 
22     ubyte[] oArchive(T)(const ref T val)
23             if (!isDynamicArray!T && !isAssociativeArray!T && !isAggregateType!T) {
24         T copy = val;
25         specify(this, copy);
26         return _buffer.data();
27     }
28 
29     ubyte[] oArchive(T)(const(T)[] val) {
30         auto copy = (cast(T[]) val).dup;
31         specify(this, copy);
32         return _buffer.data();
33     }
34 
35     ubyte[] oArchive(K, V)(const(V[K]) val) {
36         auto copy = cast(V[K]) val.dup;
37         specify(this, copy);
38         return _buffer.data();
39     }
40 
41     void putUbyte(ref ubyte val) {
42         _buffer.put(val);
43     }
44 
45     void putClass(T)(T val) if (is(T == class)) {
46         specifyClass(this, val);
47     }
48 
49     void putRaw(ubyte[] val) {
50         _buffer.put(val);
51     }
52 
53     bool isNullObj() {
54         return false;
55     }
56 
57 }