Deserializer

- Cleaned up
- Removed now-completed comments
This commit is contained in:
Tristan B. Velloza Kildaire 2023-06-28 16:21:30 +02:00
parent ea079bbde4
commit b66c7741af
1 changed files with 14 additions and 12 deletions

View File

@ -5,7 +5,8 @@ module jstruct.deserializer;
import std.json; import std.json;
import jstruct.exceptions : DeserializationError; import jstruct.exceptions : DeserializationError;
import std.traits : FieldTypeTuple, FieldNameTuple, isArray; import std.traits : FieldTypeTuple, FieldNameTuple, isArray, ForeachType, EnumMembers, fullyQualifiedName;;
import std.conv : to;
/** /**
* Deserializes the provided JSON into a struct of type RecordType * Deserializes the provided JSON into a struct of type RecordType
@ -103,13 +104,8 @@ 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: Add component type checking
else static if(isArray!(structTypes[cnt])) else static if(isArray!(structTypes[cnt]))
{ {
import std.traits : ForeachType;
import std.conv : to;
alias recordArrayComponent = mixin("record."~structNames[cnt]); alias recordArrayComponent = mixin("record."~structNames[cnt]);
JSONValue[] jsonArray = jsonIn[structNames[cnt]].array(); JSONValue[] jsonArray = jsonIn[structNames[cnt]].array();
@ -183,16 +179,22 @@ public RecordType fromJSON(RecordType)(JSONValue jsonIn)
{ {
string enumChoice = jsonIn[structNames[cnt]].str(); string enumChoice = jsonIn[structNames[cnt]].str();
import std.traits: EnumMembers, fullyQualifiedName;
alias members = EnumMembers!(structTypes[cnt]); alias members = EnumMembers!(structTypes[cnt]);
import std.stdio; version(dbg)
{
import std.stdio : writeln;
}
static foreach(member; members) static foreach(member; members)
{ {
writeln(member); version(dbg)
writeln(fullyQualifiedName!(member)); {
writeln(__traits(identifier, member)); writeln(member);
writeln(fullyQualifiedName!(member));
writeln(__traits(identifier, member));
}
if(__traits(identifier, member) == enumChoice) if(__traits(identifier, member) == enumChoice)
{ {
mixin("record."~structNames[cnt]) = member; mixin("record."~structNames[cnt]) = member;