module lmpl4d;

public import lmpl4d.common, lmpl4d.packer, lmpl4d.unpacker;

auto packer(Stream)(ref Stream stream) {
	return Packer!Stream(stream);
}

auto unpacker(Stream = const(ubyte)[])(Stream stream) {
	return Unpacker!Stream(stream);
}

unittest {
	import std.stdio;

	ubyte[] buf;
	auto data = packer(buf);
	data.pack(42);
	data.pack(null, true, 1u);
	data.pack([1, 2, 3]);
	data.pack(["foo": "bar"]);
	data.packArray(true, 1);
	data.packMap("Hi", 100);
	auto p = unpacker(buf);
	assert(p.unpack!int == 42);
	assert(p.unpack!(int[]) == []);
	assert(p.unpack!bool);
	assert(p.unpack!uint == 1);
	assert(p.unpack!(uint[]));
	assert(p.unpack!(string[string]));
}