#pragma once

#include <QMetaType>
#include <QList>
#include <QString>
#include <QPointF>
#include <QDataStream>
#include <QDebug>

#include "export.hpp"

Q_DECLARE_METATYPE(QList<double>)
Q_DECLARE_METATYPE(QList<float>)
Q_DECLARE_METATYPE(QList<int>)
Q_DECLARE_METATYPE(QList<bool>)
Q_DECLARE_METATYPE(QList<QString>)
Q_DECLARE_METATYPE(QList<QPointF>)

namespace options {
namespace detail {

struct custom_type_initializer final
{
    static const custom_type_initializer singleton;

    custom_type_initializer();

    template<typename t> static inline void declare_for_type(const char* str)
    {
        qRegisterMetaType<t>(str);
        qRegisterMetaTypeStreamOperators<t>();
    }
};

}
}