deserializeWithPolicy

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.

T
deserializeWithPolicy
(
Serializer
alias Policy
T
ARGS...
)
(
ARGS args
)

Examples

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);

See Also

vibe.data.json.JsonSerializer, vibe.data.json.JsonStringSerializer, vibe.data.bson.BsonSerializer

Meta