#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<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
