15 using namespace Foundation;
16 if constexpr (same_as<T, bool>) {
17 return DataType::eBoolean;
19 else if constexpr (same_as<T, uint8_t>) {
20 return DataType::eUI1;
22 else if constexpr (same_as<T, uint16_t>) {
23 return DataType::eUI2;
25 else if constexpr (same_as<T, uint32_t>) {
26 return DataType::eUI4;
28 else if constexpr (same_as<T, uint64_t>) {
29 return DataType::eUI8;
31 else if constexpr (same_as<T, int8_t>) {
34 else if constexpr (same_as<T, int16_t>) {
37 else if constexpr (same_as<T, int32_t>) {
40 else if constexpr (same_as<T, int64_t>) {
43 else if constexpr (same_as<T, float>) {
46 else if constexpr (same_as<T, double>) {
49 else if constexpr (same_as<T, Characters::Character>) {
50 return DataType::eChar;
52 else if constexpr (same_as<T, String>) {
53 return DataType::eString;
55 else if constexpr (same_as<T, Time::Date>) {
56 return DataType::eDate;
58 else if constexpr (same_as<T, Time::DateTime>) {
59 return DataType::eDateTimeTZ;
61 else if constexpr (same_as<T, Time::TimeOfDay>) {
62 return DataType::eTime;
64 else if constexpr (same_as<T, Memory::BLOB>) {
65 return DataType::eBinBase64;
67 else if constexpr (same_as<T, IO::Network::URI>) {
68 return DataType::eURI;
71 static_assert (same_as<T, Common::GUID>);
72 return DataType::eUUID;
84 using namespace Foundation;
87 return same_as<T, uint8_t>;
89 return same_as<T, uint16_t>;
91 return same_as<T, uint32_t>;
93 return same_as<T, uint64_t>;
95 return same_as<T, int8_t>;
97 return same_as<T, int16_t>;
100 return same_as<T, int32_t>;
102 return same_as<T, int64_t>;
104 return same_as<T, float>;
106 case DataType::eNumber:
107 case DataType::eFixed14_4:
108 case DataType::eFloat:
109 return same_as<T, double>;
110 case DataType::eChar:
111 return same_as<T, Characters::Character>;
112 case DataType::eString:
113 return same_as<T, String>;
114 case DataType::eDate:
115 return same_as<T, Time::Date>;
116 case DataType::eDateTime:
117 case DataType::eDateTimeTZ:
118 return same_as<T, Time::DateTime>;
119 case DataType::eTime:
120 case DataType::eTimeTZ:
121 return same_as<T, Time::TimeOfDay>;
122 case DataType::eBoolean:
123 return same_as<T, bool>;
124 case DataType::eBinBase64:
125 case DataType::eBinHex:
126 return same_as<T, Memory::BLOB>;
128 return same_as<T, IO::Network::URI>;
129 case DataType::eUUID:
130 return same_as<T, Common::GUID>;
143 return ToText (
Value{in_place_type<T>, v}, DefaultDataType<T> ());
154 Require (IsTypeOf<T> (t));
155 if (optional<Value> v =
FromText (text, t)) {
163 return FromText<T> (text, DefaultDataType<T> ());
170 constexpr EnumNames<Frameworks::UPnP::DataTypes::DataType> DefaultNames<Frameworks::UPnP::DataTypes::DataType>::k{{{
171 {Frameworks::UPnP::DataTypes::DataType::eUI1, L
"ui1"},
172 {Frameworks::UPnP::DataTypes::DataType::eUI2, L
"ui2"},
173 {Frameworks::UPnP::DataTypes::DataType::eUI4, L
"ui4"},
174 {Frameworks::UPnP::DataTypes::DataType::eUI8, L
"ui8"},
175 {Frameworks::UPnP::DataTypes::DataType::eI1, L
"i1"},
176 {Frameworks::UPnP::DataTypes::DataType::eI2, L
"i2"},
177 {Frameworks::UPnP::DataTypes::DataType::eI4, L
"i4"},
178 {Frameworks::UPnP::DataTypes::DataType::eI8, L
"i8"},
179 {Frameworks::UPnP::DataTypes::DataType::eInt, L
"int"},
180 {Frameworks::UPnP::DataTypes::DataType::eR4, L
"r4"},
181 {Frameworks::UPnP::DataTypes::DataType::eR8, L
"r8"},
182 {Frameworks::UPnP::DataTypes::DataType::eNumber, L
"number"},
183 {Frameworks::UPnP::DataTypes::DataType::eFixed14_4, L
"fixed.14.4"},
184 {Frameworks::UPnP::DataTypes::DataType::eFloat, L
"float"},
185 {Frameworks::UPnP::DataTypes::DataType::eChar, L
"char"},
186 {Frameworks::UPnP::DataTypes::DataType::eString, L
"string"},
187 {Frameworks::UPnP::DataTypes::DataType::eDate, L
"date"},
188 {Frameworks::UPnP::DataTypes::DataType::eDateTime, L
"dateTime"},
189 {Frameworks::UPnP::DataTypes::DataType::eDateTimeTZ, L
"dateTime.tz"},
190 {Frameworks::UPnP::DataTypes::DataType::eTime, L
"time"},
191 {Frameworks::UPnP::DataTypes::DataType::eTimeTZ, L
"time.tz"},
192 {Frameworks::UPnP::DataTypes::DataType::eBoolean, L
"boolean"},
193 {Frameworks::UPnP::DataTypes::DataType::eBinBase64, L
"bin.base64"},
194 {Frameworks::UPnP::DataTypes::DataType::eBinHex, L
"bin.hex"},
195 {Frameworks::UPnP::DataTypes::DataType::eURI, L
"uri"},
196 {Frameworks::UPnP::DataTypes::DataType::eUUID, L
"uuid"},
String is like std::u32string, except it is much easier to use, often much more space efficient,...
variant< bool, uint8_t, uint16_t, uint32_t, uint64_t, int8_t, int16_t, int32_t, int64_t, float, double, Foundation::Characters::Character, String, Foundation::Time::Date, Foundation::Time::DateTime, Foundation::Time::TimeOfDay, Foundation::Memory::BLOB, Foundation::IO::Network::URI, Foundation::Common::GUID > Value
A value of any of UPnP's data types, as its C++ type (the table above) - for code that learns a value...
constexpr bool IsTypeOf(DataType t)
Whether T is t's C++ type (the table above)
DataType
UPnP's data types - each named, as a service's description names it (Common::DefaultNames): ui2,...
optional< T > FromText(const String &text)
text read as UPnP reads it: as t, if given, else as T's default data type (the table above) - nullopt...
String ToText(const T &v)
v, as UPnP writes it: as t, if given, else as its C++ type's default data type (the table above)
constexpr DataType DefaultDataType()
The data type a T is written as, given none: its default (marked * in the table above)