serializeWithPolicy

Serializes a value with the given serializer, representing values according to Policy when possible.

The serializer must have a value result for the first form to work. Otherwise, use the range based form.

  1. auto serializeWithPolicy(T value, ARGS args)
    serializeWithPolicy
    (
    Serializer
    alias Policy
    T
    ARGS...
    )
    (
    auto ref T value
    ,
    ARGS args
    )
  2. void serializeWithPolicy(Serializer serializer, T value)

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) {
		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;
}
SizeI sizeI = SizeI(1,2);
Json serializedI = serializeWithPolicy!(JsonSerializer, SizePol)(sizeI);
assert(serializedI.get!string == "1x2");

static struct SizeF {
	float x;
	float y;
}
SizeF sizeF = SizeF(0.1f,0.2f);
Json serializedF = serializeWithPolicy!(JsonSerializer, SizePol)(sizeF);
assert(serializedF.get!string == "0.1x0.2");

See Also

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

Meta