#pragma once

#include "data_types.hpp"

namespace phosphor
{
namespace dbus
{
namespace monitoring
{
namespace detail
{

/** @brief Map format strings to undecorated C++ types. */
template <typename T> struct GetFormatType
{

};
template <> struct GetFormatType<bool>
{
    static constexpr auto format = "%d";
};
template <> struct GetFormatType<char>
{
    static constexpr auto format = "=%hhd";
};
template <> struct GetFormatType<short int>
{
    static constexpr auto format = "=%hd";
};
template <> struct GetFormatType<int>
{
    static constexpr auto format = "=%d";
};
template <> struct GetFormatType<long int>
{
    static constexpr auto format = "=%ld";
};
template <> struct GetFormatType<long long int>
{
    static constexpr auto format = "=%lld";
};
template <> struct GetFormatType<unsigned char>
{
    static constexpr auto format = "=%hhd";
};
template <> struct GetFormatType<unsigned short int>
{
    static constexpr auto format = "=%hd";
};
template <> struct GetFormatType<unsigned int>
{
    static constexpr auto format = "=%d";
};
template <> struct GetFormatType<unsigned long int>
{
    static constexpr auto format = "=%ld";
};
template <> struct GetFormatType<unsigned long long int>
{
    static constexpr auto format = "=%lld";
};
template <> struct GetFormatType<std::string>
{
    static constexpr auto format = "=%s";
};
template <> struct GetFormatType<char*>
{
    static constexpr auto format = "=%s";
};
template <> struct GetFormatType<const char*>
{
    static constexpr auto format = "=%s";
};

} // namespace detail

/** @brief Get the format string for a C++ type. */
template <typename T> struct GetFormat
{
    static constexpr auto format =
        detail::GetFormatType<DowncastType<T>>::format;
};

} // namespace monitoring
} // namespace dbus
} // namespace phosphor
