mirror of https://github.com/Hax-io/jstruct
Deserializer
- Added array deserialization support for integral types
This commit is contained in:
parent
838ecb2a08
commit
72ba0cd7b5
|
@ -2,7 +2,7 @@ module jstruct.deserializer;
|
||||||
|
|
||||||
import std.json;
|
import std.json;
|
||||||
import jstruct.exceptions : SerializationError;
|
import jstruct.exceptions : SerializationError;
|
||||||
import std.traits : FieldTypeTuple, FieldNameTuple;
|
import std.traits : FieldTypeTuple, FieldNameTuple, isArray;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deserializes the provided JSON into a struct of type RecordType
|
* Deserializes the provided JSON into a struct of type RecordType
|
||||||
|
@ -100,16 +100,63 @@ public RecordType fromJSON(RecordType)(JSONValue jsonIn)
|
||||||
pragma(msg,"record."~structNames[cnt]);
|
pragma(msg,"record."~structNames[cnt]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// //FIXME: Not sure how to get array support going, very new to meta programming
|
//FIXME: Not sure how to get array support going, very new to meta programming
|
||||||
// else static if(__traits(isSame, structTypes[cnt], structTypes[cnt])[])
|
// FIXME: Add component type checking
|
||||||
// {
|
else static if(isArray!(structTypes[cnt]))
|
||||||
// mixin("record."~structNames[cnt]) = jsonIn[structNames[cnt]].boolean();
|
{
|
||||||
|
import std.traits : ForeachType;
|
||||||
|
import std.conv : to;
|
||||||
|
|
||||||
// debug(dbg)
|
alias recordArrayComponent = mixin("record."~structNames[cnt]);
|
||||||
// {
|
|
||||||
// pragma(msg,"record."~structNames[cnt]);
|
JSONValue[] jsonArray = jsonIn[structNames[cnt]].array();
|
||||||
// }
|
|
||||||
// }
|
for(ulong i = 0; i < jsonArray.length; i++)
|
||||||
|
{
|
||||||
|
JSONValue jsonVal = jsonArray[i];
|
||||||
|
|
||||||
|
static if(__traits(isSame, ForeachType!(structTypes[cnt]), byte))
|
||||||
|
{
|
||||||
|
mixin("record."~structNames[cnt])~= cast(byte)jsonVal.integer();
|
||||||
|
}
|
||||||
|
else static if(__traits(isSame, ForeachType!(structTypes[cnt]), ubyte))
|
||||||
|
{
|
||||||
|
mixin("record."~structNames[cnt])~= cast(ubyte)jsonVal.uinteger();
|
||||||
|
}
|
||||||
|
static if(__traits(isSame, ForeachType!(structTypes[cnt]), short))
|
||||||
|
{
|
||||||
|
mixin("record."~structNames[cnt])~= cast(short)jsonVal.integer();
|
||||||
|
}
|
||||||
|
else static if(__traits(isSame, ForeachType!(structTypes[cnt]), ushort))
|
||||||
|
{
|
||||||
|
mixin("record."~structNames[cnt])~= cast(ushort)jsonVal.uinteger();
|
||||||
|
}
|
||||||
|
static if(__traits(isSame, ForeachType!(structTypes[cnt]), int))
|
||||||
|
{
|
||||||
|
mixin("record."~structNames[cnt])~= cast(int)jsonVal.integer();
|
||||||
|
}
|
||||||
|
else static if(__traits(isSame, ForeachType!(structTypes[cnt]), uint))
|
||||||
|
{
|
||||||
|
mixin("record."~structNames[cnt])~= cast(uint)jsonVal.uinteger();
|
||||||
|
}
|
||||||
|
static if(__traits(isSame, ForeachType!(structTypes[cnt]), long))
|
||||||
|
{
|
||||||
|
mixin("record."~structNames[cnt])~= cast(long)jsonVal.integer();
|
||||||
|
}
|
||||||
|
else static if(__traits(isSame, ForeachType!(structTypes[cnt]), ulong))
|
||||||
|
{
|
||||||
|
mixin("record."~structNames[cnt])~= cast(ulong)jsonVal.uinteger();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// mixin("record."~structNames[cnt]) = jsonIn[structNames[cnt]].array();
|
||||||
|
|
||||||
|
debug(dbg)
|
||||||
|
{
|
||||||
|
pragma(msg,"record."~structNames[cnt]);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// throw new
|
// throw new
|
||||||
|
|
Loading…
Reference in New Issue