import vibe.data.json; template SizePol(T) if (__traits(allMembers, T) == TypeTuple!("x", "y")) { import std.conv; import std.array; static string toRepresentation(T value) @safe { return to!string(value.x) ~ "x" ~ to!string(value.y); } static T fromRepresentation(string value) @safe { string[] fields = value.split('x'); alias fieldT = typeof(T.x); auto x = to!fieldT(fields[0]); auto y = to!fieldT(fields[1]); return T(x, y); } } static struct SizeI { int x; int y; } Json serializedI = "1x2"; SizeI sizeI = deserializeWithPolicy!(JsonSerializer, SizePol, SizeI)(serializedI); assert(sizeI.x == 1); assert(sizeI.y == 2); static struct SizeF { float x; float y; } Json serializedF = "0.1x0.2"; SizeF sizeF = deserializeWithPolicy!(JsonSerializer, SizePol, SizeF)(serializedF); assert(sizeF.x == 0.1f); assert(sizeF.y == 0.2f);
vibe.data.json.JsonSerializer, vibe.data.json.JsonStringSerializer, vibe.data.bson.BsonSerializer
Deserializes and returns a serialized value, interpreting values according to Policy when possible.
serialized_data can be either an input range or a value containing the serialized data, depending on the type of serializer used.