Minh Nguyen / ArduinoJson
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers VariantAsImpl.hpp Source File

VariantAsImpl.hpp

00001 // ArduinoJson - arduinojson.org
00002 // Copyright Benoit Blanchon 2014-2021
00003 // MIT License
00004 
00005 #pragma once
00006 
00007 #include <ArduinoJson/Strings/IsWriteableString.hpp>
00008 #include <ArduinoJson/Variant/VariantFunctions.hpp>
00009 #include <ArduinoJson/Variant/VariantRef.hpp>
00010 
00011 namespace ARDUINOJSON_NAMESPACE {
00012 
00013 template <typename T>
00014 inline typename enable_if<is_same<ArrayConstRef, T>::value, T>::type variantAs(
00015     const VariantData* _data) {
00016   return ArrayConstRef(variantAsArray(_data));
00017 }
00018 
00019 template <typename T>
00020 inline typename enable_if<is_same<ObjectConstRef, T>::value, T>::type variantAs(
00021     const VariantData* _data) {
00022   return ObjectConstRef(variantAsObject(_data));
00023 }
00024 
00025 template <typename T>
00026 inline typename enable_if<is_same<VariantConstRef, T>::value, T>::type
00027 variantAs(const VariantData* _data) {
00028   return VariantConstRef(_data);
00029 }
00030 
00031 template <typename T>
00032 inline typename enable_if<IsWriteableString<T>::value, T>::type variantAs(
00033     const VariantData* _data) {
00034   const char* cstr = _data != 0 ? _data->asString() : 0;
00035   if (cstr)
00036     return T(cstr);
00037   T s;
00038   serializeJson(VariantConstRef(_data), s);
00039   return s;
00040 }
00041 
00042 template <>
00043 inline ArrayRef variantAs<ArrayRef>(VariantData* data, MemoryPool* pool) {
00044   return ArrayRef(pool, data != 0 ? data->asArray() : 0);
00045 }
00046 
00047 template <>
00048 inline ObjectRef variantAs<ObjectRef>(VariantData* data, MemoryPool* pool) {
00049   return ObjectRef(pool, data != 0 ? data->asObject() : 0);
00050 }
00051 
00052 template <>
00053 inline VariantRef variantAs<VariantRef>(VariantData* data, MemoryPool* pool) {
00054   return VariantRef(pool, data);
00055 }
00056 
00057 }  // namespace ARDUINOJSON_NAMESPACE