module treeserial; import std.traits; import std.bitmanip; enum NoLength; template serialize(Ts...) { ubyte[] serialize(T)(T data) if(isIntegral!T || isSomeChar!T || isBoolean!T || isFloatOrDouble!T) { return nativeToLittleEndian(data).dup; } ////ubyte[T.sizeof] serialize(T)(T data) if(isIntegral!T || isSomeChar!T || isBoolean!T) { //// return nativeToLittleEndian(data).dup; ////} } template deserialize(T, Ts...) { static if (isIntegral!T || isSomeChar!T || isBoolean!T || isFloatOrDouble!T) { ////T deserialize(scope ubyte[T.sizeof] data) { //// return littleEndianToNative!T(data); ////} T deserialize(ref ubyte[] data) { scope (success) data = data[T.sizeof..$]; return littleEndianToNative!T(data[0..T.sizeof]); } } } /// Copied from phobas/std/bitmanip private template isFloatOrDouble(T) { enum isFloatOrDouble = isFloatingPoint!T && !is(Unqual!(FloatingPointTypeOf!T) == real); }