module msgpack.register;

import msgpack.packer;
import msgpack.unpacker;

import std.array;


/**
 * Register a serialization handler for $(D_PARAM T) type
 *
 * Example:
 * -----
 * registerPackHandler!(Foo, fooPackHandler);
 * -----
 */
void registerPackHandler(T, alias Handler, Stream = Appender!(ubyte[]))()
{
    PackerImpl!(Stream).registerHandler!(T, Handler);
}


/**
 * Register a deserialization handler for $(D_PARAM T) type
 *
 * Example:
 * -----
 * registerUnackHandler!(Foo, fooUnackHandler);
 * -----
 */
void registerUnpackHandler(T, alias Handler)()
{
    Unpacker.registerHandler!(T, Handler);
}


/**
 * Register derived class for (de)serialization
 *
 * Example:
 * -----
 * registerClass!(DerivedClass);
 * -----
 */
void registerClass(T, Stream = Appender!(ubyte[]))()
{
    PackerImpl!(Stream).register!(T);
    Unpacker.register!(T);
}