// Copyright Benoit Blanchon 2014-2016 // MIT License // // Arduino JSON library // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! #pragma once #include "Configuration.hpp" #include "JsonVariantBase.hpp" #include "TypeTraits/EnableIf.hpp" #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4522) #endif namespace ArduinoJson { template class JsonObjectSubscript : public JsonVariantBase > { public: FORCE_INLINE JsonObjectSubscript(JsonObject& object, TKey key) : _object(object), _key(key) {} JsonObjectSubscript& operator=(const JsonObjectSubscript& src) { _object.set(_key, src); return *this; } template typename TypeTraits::EnableIf::value, JsonObjectSubscript >::type& operator=(const T& src) { _object.set(_key, const_cast(src)); return *this; } template typename TypeTraits::EnableIf::value, JsonObjectSubscript >::type& operator=(T src) { _object.set(_key, src); return *this; } FORCE_INLINE bool success() const { return _object.containsKey(_key); } FORCE_INLINE operator JsonVariant() const { return _object.get(_key); } template FORCE_INLINE TValue as() const { return _object.get(_key); } template FORCE_INLINE bool is() const { return _object.is(_key); } template FORCE_INLINE bool set(TValue value) { return _object.set(_key, value); } template FORCE_INLINE bool set(TValue value, uint8_t decimals) { return _object.set(_key, value, decimals); } FORCE_INLINE JsonVariant get() { return _object.get(_key); } void writeTo(Internals::JsonWriter& writer) const { _object.get(_key).writeTo(writer); } private: JsonObject& _object; TKey _key; }; #if ARDUINOJSON_ENABLE_STD_STREAM inline std::ostream& operator<<( std::ostream& os, const JsonObjectSubscript& source) { return source.printTo(os); } inline std::ostream& operator<<( std::ostream& os, const JsonObjectSubscript& source) { return source.printTo(os); } #endif } // namespace ArduinoJson #ifdef _MSC_VER #pragma warning(pop) #endif