// ArduinoJson - arduinojson.org // Copyright Benoit Blanchon 2014-2018 // MIT License #pragma once #include "Configuration.hpp" #include "JsonVariantBase.hpp" #include "Polyfills/type_traits.hpp" #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4522) #endif namespace ArduinoJson { namespace Internals { template class JsonObjectSubscript : public JsonVariantBase > { typedef JsonObjectSubscript this_type; public: FORCE_INLINE JsonObjectSubscript(JsonObject object, TStringRef key) : _object(object), _key(key) {} FORCE_INLINE this_type &operator=(const this_type &src) { _object.set(_key, src); return *this; } // Set the specified value // // operator=(const TValue&); // TValue = bool, char, long, int, short, float, double, // std::string, String, JsonArray, JsonObject template FORCE_INLINE typename enable_if::value, this_type &>::type operator=(const TValue &src) { _object.set(_key, src); return *this; } // // operator=(TValue); // TValue = char*, const char*, const FlashStringHelper* template FORCE_INLINE this_type &operator=(TValue *src) { _object.set(_key, src); return *this; } FORCE_INLINE bool isNull() const { return !_object.containsKey(_key); } template FORCE_INLINE typename JsonVariantAs::type as() const { return _object.get(_key); } template FORCE_INLINE bool is() const { return _object.is(_key); } // Sets the specified value. // // bool set(const TValue&); // TValue = bool, char, long, int, short, float, double, serialized, // JsonVariant, // std::string, String, JsonArray, JsonObject template FORCE_INLINE typename enable_if::value, bool>::type set( const TValue &value) { return _object.set(_key, value); } // // bool set(TValue); // TValue = char*, const char, const FlashStringHelper* template FORCE_INLINE bool set(const TValue *value) { return _object.set(_key, value); } template void visit(Visitor &visitor) const { return _object.get(_key).visit(visitor); } private: JsonObject _object; TStringRef _key; }; template template inline typename enable_if::value, const JsonObjectSubscript >::type JsonVariantSubscripts::operator[](const TString &key) const { return impl()->template as()[key]; } template template inline typename enable_if::value, JsonObjectSubscript >::type JsonVariantSubscripts::operator[](const TString &key) { return impl()->template as()[key]; } template template inline typename enable_if::value, JsonObjectSubscript >::type JsonVariantSubscripts::operator[](const TString *key) { return impl()->template as()[key]; } template template inline typename enable_if::value, const JsonObjectSubscript >::type JsonVariantSubscripts::operator[](const TString *key) const { return impl()->template as()[key]; } } // namespace Internals } // namespace ArduinoJson #ifdef _MSC_VER #pragma warning(pop) #endif