11 #ifndef __NET_ConvertToType_H__
12 #define __NET_ConvertToType_H__
29 #include <type_traits>
31 #define NET_REQUIRE(_cond_) std::enable_if_t<_cond_>
40 return obj.serialize(writer);
46 return obj.serialize(data);
53 #define NET_DEFINE_INT_SERIALIZER(_T_) \
55 inline bool NETserialize<_T_>(UT_JSONWriter& writer, const _T_& obj) \
57 writer.jsonValue(obj); \
61 inline bool NETserialize<_T_>(const UT_JSONValue& data, _T_& item) \
64 bool res = data.import(v); \
65 item = static_cast<_T_>(v); \
71 #undef NET_DEFINE_INT_SERIALIZER
76 writer.jsonValue(obj);
83 return data.import(obj);
89 writer.jsonValue(static_cast<int32>(obj));
97 bool res =
data.import(tmp);
98 obj =
static_cast<uint32>(tmp);
109 writer.jsonValue(obj);
116 return data.import(item);
126 writer.jsonValue(obj);
133 return data.import(obj);
139 writer.jsonValue(obj);
152 writer.jsonValue(obj);
167 writer.jsonValue(obj.asRef());
181 writer.jsonValue(obj);
188 return data.import(obj);
198 writer.jsonValue(
id.toString());
206 if (!
data.import(str))
209 return id.setString(str);
216 template <
typename T,
template <
typename>
class ARRAY>
220 for (
auto&& item : items)
221 NETserialize<T>(writer, item);
222 writer.jsonEndArray();
226 template <
typename T,
template <
typename>
class ARRAY>
248 #define NET_DEFINE_ARRAY_SERIALIZER(_ARRAY_) \
249 template <typename T> \
250 inline bool NETserialize(UT_JSONWriter& writer, const _ARRAY_<typename T::value_type>& items) \
252 return NETserializeArray<typename T::value_type, _ARRAY_>(writer, items); \
254 template <typename T> \
255 inline bool NETserialize(const UT_JSONValue& data, _ARRAY_<typename T::value_type>& items) \
257 return NETserializeArray<typename T::value_type, _ARRAY_>(data, items); \
261 #undef NET_DEFINE_ARRAY_SERIALIZER
266 return writer.jsonStringArray(items);
280 return data.import(items);
287 template <
typename SetT>
292 for (
auto&& item : items)
293 NETserialize<T>(writer, item);
294 writer.jsonEndArray();
298 template <
typename SetT>
303 std::is_default_constructible_v<T>,
304 "Serialize of a set requires the type to be default constructibe");
315 for (
auto&&
value : data)
318 NETserialize<T>(
value, items_value);
319 items.emplace(items_value);
324 #define NET_DEFINE_SET_SERIALIZER(_SET_) \
325 template <typename T> \
326 inline bool NETserialize(UT_JSONWriter& writer, const _SET_<typename T::value_type>& items) \
328 return NETserializeSet<T>(writer, items); \
330 template <typename T> \
331 inline bool NETserialize(const UT_JSONValue& data, _SET_<typename T::value_type>& items) \
333 return NETserializeSet<T>(data, items); \
336 #undef NET_DEFINE_SET_SERIALIZER
342 return writer.jsonSetAsArray(items);
358 return NETserializeSet<UT_StringSet>(
data, items);
368 writer.jsonValue(
value);
389 return opts.options()->save(writer);
400 return o->
load(*m,
false);
406 template <
typename T1,
typename T2>
410 const std::pair<T1, T2> &obj)
413 NETserialize<T1>(writer, obj.first);
414 NETserialize<T2>(writer, obj.second);
415 writer.jsonEndArray();
419 template <
typename T1,
typename T2>
423 std::pair<T1, T2> &obj)
427 return NETserialize<T1>(data[0], obj.first)
428 && NETserialize<T2>(data[1], obj.second);
433 template <
typename T>
437 const std::pair<typename T::first_type, typename T::second_type>& p)
441 template <
typename T>
445 std::pair<typename T::first_type, typename T::second_type>& p)
458 return writer.jsonValue(url.toString());
467 url.parse(data.getString());
509 namespace NET_ConvertToType
515 typedef std::remove_const_t<std::remove_reference_t<T>>
type;
523 template <
typename Tto,
typename Enable =
void>
529 UT_ASSERT(!
"This code should never be entered. You have not setup a proper cast for this type.");
534 template <
typename Tto>
537 NET_remove_cref_t<Tto>>::value>>
543 template <
typename Tto>
546 NET_remove_cref_t<Tto>>::value>>
565 for (
auto &&value : values)
574 template <
typename Tto>
577 std::
enable_if_t<std::is_same<UT_IntArray, NET_remove_cref_t<Tto>>::value>>
586 for (
auto &&value : values)
596 template <
typename Tto>
599 !std::is_same<Tto, bool>::value>>
606 return source.
toInt();
610 template <
typename Tto>
622 template <
typename Tto>
630 return source.
toInt();
633 return low_source ==
"true";
639 template <
typename Tto,
typename Tfrom>
646 #endif // __NET_ConvertToType_H__
static Tto cast(const UT_StringHolder &source)
typename std::enable_if< B, T >::type enable_if_t
Define Imath::enable_if_t to be std for C++14, equivalent for C++11.
bool NETserialize< UT_String >(UT_JSONWriter &writer, const UT_String &obj)
bool NETserialize< UT_WorkBuffer >(UT_JSONWriter &writer, const UT_WorkBuffer &obj)
UT_JSONValueMap stores a map/dictionary of UT_JSONValue objects.
bool parseValue(UT_JSONParser &parser, UT_IStream *is=0, bool record_source_offsets=false)
bool NETserializeSet(UT_JSONWriter &writer, const SetT &items)
GLsizei const GLfloat * value
bool isEmpty() const
Same as !isstring()
bool isFloat(bool skip_spaces=false, bool loose=false) const
Determine if string can be seen as a single floating point number.
typename NET_remove_cref< T >::type NET_remove_cref_t
bool NETserialize< NET_EmptySerializer >(UT_JSONWriter &writer, const NET_EmptySerializer &)
void setCapacity(exint new_capacity)
bool NETserialize< bool >(UT_JSONWriter &writer, const bool &obj)
Tto convert(const Tfrom &source)
Class which writes ASCII or binary JSON streams.
bool NETserialize< UT_SGuid >(UT_JSONWriter &writer, const UT_SGuid &id)
**But if you need a result
bool NETserialize< UT_StringArray >(UT_JSONWriter &writer, const UT_StringArray &items)
bool NETserialize< UT_StringLit >(UT_JSONWriter &writer, const UT_StringLit &obj)
bool isInteger(bool skip_spaces=false) const
Determine if string can be seen as a single integer number.
A utility class to do read-only operations on a subset of an existing string.
bool NETserializePair(UT_JSONWriter &writer, const std::pair< T1, T2 > &obj)
exint emplace_back(S &&...s)
bool load(const char *filename)
bool NETserialize< UT_Url >(UT_JSONWriter &writer, const UT_Url &url)
SYS_FORCE_INLINE const char * buffer() const
bool NETserialize< int64 >(UT_JSONWriter &writer, const int64 &obj)
bool NETserialize(UT_JSONWriter &writer, const T &obj)
GLsizei GLsizei GLchar * source
SYS_NO_DISCARD_RESULT indexed_proxy enumerate()
SYS_NO_DISCARD_RESULT bool isArray() const
#define NET_DEFINE_SET_SERIALIZER(_SET_)
#define NET_DEFINE_INT_SERIALIZER(_T_)
SYS_NO_DISCARD_RESULT const UT_StringHolder * getStringHolder() const
Return the string value.
static Tto cast(const UT_StringHolder &source)
static Tto cast(const UT_StringHolder &source)
A map of string to various well defined value types.
static Tto cast(const UT_StringHolder &source)
bool NETserialize< UT_JSONValue >(UT_JSONWriter &writer, const UT_JSONValue &value)
GLenum GLsizei GLsizei GLint * values
SYS_NO_DISCARD_RESULT exint count() const
Number of elements contained inside the json value.
SYS_NO_DISCARD_RESULT UT_StringRef toLower() const
bool NETserialize< UT_OptionsHolder >(UT_JSONWriter &writer, const UT_OptionsHolder &opts)
static Tto cast(const UT_StringHolder &source)
#define NET_DEFINE_ARRAY_SERIALIZER(_ARRAY_)
bool jsonBeginArray()
Begin a generic array object.
SYS_NO_DISCARD_RESULT Type getType() const
Get the type of data stored in the object.
Class to store JSON objects as C++ objects.
static Tto cast(const UT_StringHolder &source)
bool NETserialize< UT_StringRef >(UT_JSONWriter &writer, const UT_StringRef &obj)
SYS_NO_DISCARD_RESULT const UT_StringHolder & getString() const
static Tto cast(const UT_StringHolder &source)
std::remove_const_t< std::remove_reference_t< T > > type
bool NETserialize< UT_StringHolder >(UT_JSONWriter &writer, const UT_StringHolder &obj)
bool NETserialize< UT_StringSet >(UT_JSONWriter &writer, const UT_StringSet &items)
bool NETserialize< uint32 >(UT_JSONWriter &writer, const uint32 &obj)
bool NETserializeArray(UT_JSONWriter &writer, const ARRAY< T > &items)