// 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 "JsonVariant.hpp" namespace ArduinoJson { inline JsonVariant::JsonVariant(bool value) { using namespace Internals; _type = JSON_BOOLEAN; _content.asInteger = static_cast(value); } inline JsonVariant::JsonVariant(const char *value) { _type = Internals::JSON_STRING; _content.asString = value; } inline JsonVariant::JsonVariant(Internals::Unparsed value) { _type = Internals::JSON_UNPARSED; _content.asString = value; } inline JsonVariant::JsonVariant(double value, uint8_t decimals) { using namespace Internals; _type = static_cast(JSON_FLOAT_0_DECIMALS + decimals); _content.asFloat = static_cast(value); } inline JsonVariant::JsonVariant(float value, uint8_t decimals) { using namespace Internals; _type = static_cast(JSON_FLOAT_0_DECIMALS + decimals); _content.asFloat = static_cast(value); } inline JsonVariant::JsonVariant(JsonArray &array) { _type = Internals::JSON_ARRAY; _content.asArray = &array; } inline JsonVariant::JsonVariant(JsonObject &object) { _type = Internals::JSON_OBJECT; _content.asObject = &object; } inline JsonVariant::JsonVariant(signed char value) { using namespace Internals; _type = JSON_INTEGER; _content.asInteger = static_cast(value); } inline JsonVariant::JsonVariant(signed int value) { using namespace Internals; _type = JSON_INTEGER; _content.asInteger = static_cast(value); } inline JsonVariant::JsonVariant(signed long value) { using namespace Internals; _type = JSON_INTEGER; _content.asInteger = static_cast(value); } inline JsonVariant::JsonVariant(signed short value) { using namespace Internals; _type = JSON_INTEGER; _content.asInteger = static_cast(value); } inline JsonVariant::JsonVariant(unsigned char value) { using namespace Internals; _type = JSON_INTEGER; _content.asInteger = static_cast(value); } inline JsonVariant::JsonVariant(unsigned int value) { using namespace Internals; _type = JSON_INTEGER; _content.asInteger = static_cast(value); } inline JsonVariant::JsonVariant(unsigned long value) { using namespace Internals; _type = JSON_INTEGER; _content.asInteger = static_cast(value); } inline JsonVariant::JsonVariant(unsigned short value) { using namespace Internals; _type = JSON_INTEGER; _content.asInteger = static_cast(value); } template <> String JsonVariant::as() const; template <> const char *JsonVariant::as() const; template <> inline bool JsonVariant::as() const { return asInteger() != 0; } template <> inline signed char JsonVariant::as() const { return static_cast(asInteger()); } template <> inline unsigned char JsonVariant::as() const { return static_cast(asInteger()); } template <> inline signed short JsonVariant::as() const { return static_cast(asInteger()); } template <> inline unsigned short JsonVariant::as() const { return static_cast(asInteger()); } template <> inline signed int JsonVariant::as() const { return static_cast(asInteger()); } template <> inline unsigned int JsonVariant::as() const { return static_cast(asInteger()); } template <> inline unsigned long JsonVariant::as() const { return static_cast(asInteger()); } template <> inline signed long JsonVariant::as() const { return static_cast(asInteger()); } template <> inline double JsonVariant::as() const { return static_cast(asFloat()); } template <> inline float JsonVariant::as() const { return static_cast(asFloat()); } template inline T JsonVariant::invalid() { return T(); } template inline bool JsonVariant::is() const { return false; } template <> // in .cpp bool JsonVariant::is() const; template <> // in .cpp bool JsonVariant::is() const; template <> inline bool JsonVariant::is() const { return _type == Internals::JSON_BOOLEAN; } template <> inline bool JsonVariant::is() const { return _type == Internals::JSON_STRING; } template <> inline bool JsonVariant::is() const { return is(); } template <> inline bool JsonVariant::is() const { return _type == Internals::JSON_ARRAY; } template <> inline bool JsonVariant::is() const { return _type == Internals::JSON_ARRAY; } template <> inline bool JsonVariant::is() const { return _type == Internals::JSON_OBJECT; } template <> inline bool JsonVariant::is() const { return _type == Internals::JSON_OBJECT; } template <> inline bool JsonVariant::is() const { return is(); } template <> inline bool JsonVariant::is() const { return is(); } template <> inline bool JsonVariant::is() const { return is(); } template <> inline bool JsonVariant::is() const { return is(); } template <> inline bool JsonVariant::is() const { return is(); } template <> inline bool JsonVariant::is() const { return is(); } template <> inline bool JsonVariant::is() const { return is(); } #ifdef ARDUINOJSON_ENABLE_STD_STREAM inline std::ostream &operator<<(std::ostream &os, const JsonVariant &source) { return source.printTo(os); } #endif } // namespace ArduinoJson