summaryrefslogtreecommitdiff
path: root/include/lib/ArduinoJson/JsonVariant.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/lib/ArduinoJson/JsonVariant.hpp')
-rw-r--r--include/lib/ArduinoJson/JsonVariant.hpp355
1 files changed, 0 insertions, 355 deletions
diff --git a/include/lib/ArduinoJson/JsonVariant.hpp b/include/lib/ArduinoJson/JsonVariant.hpp
deleted file mode 100644
index 8326cbe..0000000
--- a/include/lib/ArduinoJson/JsonVariant.hpp
+++ /dev/null
@@ -1,355 +0,0 @@
-// ArduinoJson - arduinojson.org
-// Copyright Benoit Blanchon 2014-2018
-// MIT License
-
-#pragma once
-
-#include <stddef.h>
-#include <stdint.h> // for uint8_t
-
-#include "Data/JsonVariantContent.hpp"
-#include "Data/JsonVariantDefault.hpp"
-#include "Data/JsonVariantType.hpp"
-#include "JsonVariantBase.hpp"
-#include "RawJson.hpp"
-#include "Serialization/JsonPrintable.hpp"
-#include "TypeTraits/EnableIf.hpp"
-#include "TypeTraits/IsChar.hpp"
-#include "TypeTraits/IsFloatingPoint.hpp"
-#include "TypeTraits/IsIntegral.hpp"
-#include "TypeTraits/IsSame.hpp"
-#include "TypeTraits/IsSignedIntegral.hpp"
-#include "TypeTraits/IsUnsignedIntegral.hpp"
-#include "TypeTraits/RemoveConst.hpp"
-#include "TypeTraits/RemoveReference.hpp"
-
-namespace ArduinoJson {
-
-// Forward declarations.
-class JsonArray;
-class JsonObject;
-
-// A variant that can be a any value serializable to a JSON value.
-//
-// It can be set to:
-// - a boolean
-// - a char, short, int or a long (signed or unsigned)
-// - a string (const char*)
-// - a reference to a JsonArray or JsonObject
-class JsonVariant : public Internals::JsonVariantBase<JsonVariant> {
- template <typename Print>
- friend class Internals::JsonSerializer;
-
- public:
- // Creates an uninitialized JsonVariant
- JsonVariant() : _type(Internals::JSON_UNDEFINED) {}
-
- // Create a JsonVariant containing a boolean value.
- // It will be serialized as "true" or "false" in JSON.
- JsonVariant(bool value) {
- using namespace Internals;
- _type = JSON_BOOLEAN;
- _content.asInteger = static_cast<JsonUInt>(value);
- }
-
- // Create a JsonVariant containing a floating point value.
- // JsonVariant(double value);
- // JsonVariant(float value);
- template <typename T>
- JsonVariant(T value, typename Internals::EnableIf<
- Internals::IsFloatingPoint<T>::value>::type * = 0) {
- using namespace Internals;
- _type = JSON_FLOAT;
- _content.asFloat = static_cast<JsonFloat>(value);
- }
- template <typename T>
- DEPRECATED("Second argument is not supported anymore")
- JsonVariant(T value, uint8_t,
- typename Internals::EnableIf<
- Internals::IsFloatingPoint<T>::value>::type * = 0) {
- using namespace Internals;
- _type = JSON_FLOAT;
- _content.asFloat = static_cast<JsonFloat>(value);
- }
-
- // Create a JsonVariant containing an integer value.
- // JsonVariant(char)
- // JsonVariant(signed short)
- // JsonVariant(signed int)
- // JsonVariant(signed long)
- // JsonVariant(signed char)
- template <typename T>
- JsonVariant(
- T value,
- typename Internals::EnableIf<Internals::IsSignedIntegral<T>::value ||
- Internals::IsSame<T, char>::value>::type * =
- 0) {
- using namespace Internals;
- if (value >= 0) {
- _type = JSON_POSITIVE_INTEGER;
- _content.asInteger = static_cast<JsonUInt>(value);
- } else {
- _type = JSON_NEGATIVE_INTEGER;
- _content.asInteger = static_cast<JsonUInt>(-value);
- }
- }
- // JsonVariant(unsigned short)
- // JsonVariant(unsigned int)
- // JsonVariant(unsigned long)
- template <typename T>
- JsonVariant(T value,
- typename Internals::EnableIf<
- Internals::IsUnsignedIntegral<T>::value>::type * = 0) {
- using namespace Internals;
- _type = JSON_POSITIVE_INTEGER;
- _content.asInteger = static_cast<JsonUInt>(value);
- }
-
- // Create a JsonVariant containing a string.
- // JsonVariant(const char*);
- // JsonVariant(const signed char*);
- // JsonVariant(const unsigned char*);
- template <typename TChar>
- JsonVariant(
- const TChar *value,
- typename Internals::EnableIf<Internals::IsChar<TChar>::value>::type * =
- 0) {
- _type = Internals::JSON_STRING;
- _content.asString = reinterpret_cast<const char *>(value);
- }
-
- // Create a JsonVariant containing an unparsed string
- JsonVariant(Internals::RawJsonString<const char *> value) {
- _type = Internals::JSON_UNPARSED;
- _content.asString = value;
- }
-
- // Create a JsonVariant containing a reference to an array.
- // CAUTION: we are lying about constness, because the array can be modified if
- // the variant is converted back to a JsonArray&
- JsonVariant(const JsonArray &array);
-
- // Create a JsonVariant containing a reference to an object.
- // CAUTION: we are lying about constness, because the object can be modified
- // if the variant is converted back to a JsonObject&
- JsonVariant(const JsonObject &object);
-
- // Get the variant as the specified type.
- //
- // char as<char>() const;
- // signed char as<signed char>() const;
- // signed short as<signed short>() const;
- // signed int as<signed int>() const;
- // signed long as<signed long>() const;
- // unsigned char as<unsigned char>() const;
- // unsigned short as<unsigned short>() const;
- // unsigned int as<unsigned int>() const;
- // unsigned long as<unsigned long>() const;
- template <typename T>
- const typename Internals::EnableIf<Internals::IsIntegral<T>::value, T>::type
- as() const {
- return variantAsInteger<T>();
- }
- // bool as<bool>() const
- template <typename T>
- const typename Internals::EnableIf<Internals::IsSame<T, bool>::value, T>::type
- as() const {
- return variantAsInteger<int>() != 0;
- }
- //
- // double as<double>() const;
- // float as<float>() const;
- template <typename T>
- const typename Internals::EnableIf<Internals::IsFloatingPoint<T>::value,
- T>::type
- as() const {
- return variantAsFloat<T>();
- }
- //
- // const char* as<const char*>() const;
- // const char* as<char*>() const;
- template <typename T>
- typename Internals::EnableIf<Internals::IsSame<T, const char *>::value ||
- Internals::IsSame<T, char *>::value,
- const char *>::type
- as() const {
- return variantAsString();
- }
- //
- // std::string as<std::string>() const;
- // String as<String>() const;
- template <typename T>
- typename Internals::EnableIf<Internals::StringTraits<T>::has_append, T>::type
- as() const {
- const char *cstr = variantAsString();
- if (cstr) return T(cstr);
- T s;
- printTo(s);
- return s;
- }
- //
- // JsonArray& as<JsonArray> const;
- // JsonArray& as<JsonArray&> const;
- template <typename T>
- typename Internals::EnableIf<
- Internals::IsSame<typename Internals::RemoveReference<T>::type,
- JsonArray>::value,
- JsonArray &>::type
- as() const {
- return variantAsArray();
- }
- //
- // const JsonArray& as<const JsonArray&> const;
- template <typename T>
- typename Internals::EnableIf<
- Internals::IsSame<typename Internals::RemoveReference<T>::type,
- const JsonArray>::value,
- const JsonArray &>::type
- as() const {
- return variantAsArray();
- }
- //
- // JsonObject& as<JsonObject> const;
- // JsonObject& as<JsonObject&> const;
- template <typename T>
- typename Internals::EnableIf<
- Internals::IsSame<typename Internals::RemoveReference<T>::type,
- JsonObject>::value,
- JsonObject &>::type
- as() const {
- return variantAsObject();
- }
- //
- // JsonObject& as<const JsonObject> const;
- // JsonObject& as<const JsonObject&> const;
- template <typename T>
- typename Internals::EnableIf<
- Internals::IsSame<typename Internals::RemoveReference<T>::type,
- const JsonObject>::value,
- const JsonObject &>::type
- as() const {
- return variantAsObject();
- }
- //
- // JsonVariant as<JsonVariant> const;
- template <typename T>
- typename Internals::EnableIf<Internals::IsSame<T, JsonVariant>::value,
- T>::type
- as() const {
- return *this;
- }
-
- // Tells weither the variant has the specified type.
- // Returns true if the variant has type type T, false otherwise.
- //
- // bool is<char>() const;
- // bool is<signed char>() const;
- // bool is<signed short>() const;
- // bool is<signed int>() const;
- // bool is<signed long>() const;
- // bool is<unsigned char>() const;
- // bool is<unsigned short>() const;
- // bool is<unsigned int>() const;
- // bool is<unsigned long>() const;
- template <typename T>
- typename Internals::EnableIf<Internals::IsIntegral<T>::value, bool>::type is()
- const {
- return variantIsInteger();
- }
- //
- // bool is<double>() const;
- // bool is<float>() const;
- template <typename T>
- typename Internals::EnableIf<Internals::IsFloatingPoint<T>::value, bool>::type
- is() const {
- return variantIsFloat();
- }
- //
- // bool is<bool>() const
- template <typename T>
- typename Internals::EnableIf<Internals::IsSame<T, bool>::value, bool>::type
- is() const {
- return variantIsBoolean();
- }
- //
- // bool is<const char*>() const;
- // bool is<char*>() const;
- template <typename T>
- typename Internals::EnableIf<Internals::IsSame<T, const char *>::value ||
- Internals::IsSame<T, char *>::value,
- bool>::type
- is() const {
- return variantIsString();
- }
- //
- // bool is<JsonArray> const;
- // bool is<JsonArray&> const;
- // bool is<const JsonArray&> const;
- template <typename T>
- typename Internals::EnableIf<
- Internals::IsSame<typename Internals::RemoveConst<
- typename Internals::RemoveReference<T>::type>::type,
- JsonArray>::value,
- bool>::type
- is() const {
- return variantIsArray();
- }
- //
- // bool is<JsonObject> const;
- // bool is<JsonObject&> const;
- // bool is<const JsonObject&> const;
- template <typename T>
- typename Internals::EnableIf<
- Internals::IsSame<typename Internals::RemoveConst<
- typename Internals::RemoveReference<T>::type>::type,
- JsonObject>::value,
- bool>::type
- is() const {
- return variantIsObject();
- }
-
- // Returns true if the variant has a value
- bool success() const {
- return _type != Internals::JSON_UNDEFINED;
- }
-
- private:
- JsonArray &variantAsArray() const;
- JsonObject &variantAsObject() const;
- const char *variantAsString() const;
- template <typename T>
- T variantAsFloat() const;
- template <typename T>
- T variantAsInteger() const;
- bool variantIsBoolean() const;
- bool variantIsFloat() const;
- bool variantIsInteger() const;
- bool variantIsArray() const {
- return _type == Internals::JSON_ARRAY;
- }
- bool variantIsObject() const {
- return _type == Internals::JSON_OBJECT;
- }
- bool variantIsString() const {
- return _type == Internals::JSON_STRING ||
- (_type == Internals::JSON_UNPARSED && _content.asString &&
- !strcmp("null", _content.asString));
- }
-
- // The current type of the variant
- Internals::JsonVariantType _type;
-
- // The various alternatives for the value of the variant.
- Internals::JsonVariantContent _content;
-};
-
-DEPRECATED("Decimal places are ignored, use the float value instead")
-inline JsonVariant float_with_n_digits(float value, uint8_t) {
- return JsonVariant(value);
-}
-
-DEPRECATED("Decimal places are ignored, use the double value instead")
-inline JsonVariant double_with_n_digits(double value, uint8_t) {
- return JsonVariant(value);
-}
-}