blob: 8fa6dc8813566d4af0f7b345d5ac56a101cd4065 [file] [log] [blame]
#pragma once
#include "data_types.hpp"
#include <string>
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<double>
{
static constexpr auto format = "=%lf";
};
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