1 #pragma once
2 
3 #include "data_types.hpp"
4 
5 namespace phosphor
6 {
7 namespace dbus
8 {
9 namespace monitoring
10 {
11 namespace detail
12 {
13 
14 /** @brief Map format strings to undecorated C++ types. */
15 template <typename T> struct GetFormatType
16 {
17 
18 };
19 template <> struct GetFormatType<char>
20 {
21     static constexpr auto format = "=%hhd";
22 };
23 template <> struct GetFormatType<short int>
24 {
25     static constexpr auto format = "=%hd";
26 };
27 template <> struct GetFormatType<int>
28 {
29     static constexpr auto format = "=%d";
30 };
31 template <> struct GetFormatType<long int>
32 {
33     static constexpr auto format = "=%ld";
34 };
35 template <> struct GetFormatType<long long int>
36 {
37     static constexpr auto format = "=%lld";
38 };
39 template <> struct GetFormatType<unsigned char>
40 {
41     static constexpr auto format = "=%hhd";
42 };
43 template <> struct GetFormatType<unsigned short int>
44 {
45     static constexpr auto format = "=%hd";
46 };
47 template <> struct GetFormatType<unsigned int>
48 {
49     static constexpr auto format = "=%d";
50 };
51 template <> struct GetFormatType<unsigned long int>
52 {
53     static constexpr auto format = "=%ld";
54 };
55 template <> struct GetFormatType<unsigned long long int>
56 {
57     static constexpr auto format = "=%lld";
58 };
59 template <> struct GetFormatType<std::string>
60 {
61     static constexpr auto format = "=%s";
62 };
63 template <> struct GetFormatType<char*>
64 {
65     static constexpr auto format = "=%s";
66 };
67 template <> struct GetFormatType<const char*>
68 {
69     static constexpr auto format = "=%s";
70 };
71 
72 } // namespace detail
73 
74 /** @brief Get the format string for a C++ type. */
75 template <typename T> struct GetFormat
76 {
77     static constexpr auto format =
78         detail::GetFormatType<DowncastType<T>>::format;
79 };
80 
81 } // namespace monitoring
82 } // namespace dbus
83 } // namespace phosphor
84