diff options
author | Daniel Friesel <derf@finalrewind.org> | 2018-09-17 10:02:07 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2018-09-17 10:02:07 +0200 |
commit | 4f6253aa9fec99260b8bb7b9b2e9003f5259b600 (patch) | |
tree | 2d0a3fdd10e258ecce5fb220547b1c43b870d6d2 /include/lib/ArduinoJson/JsonVariantOr.hpp | |
parent | 30c4f72770568749b4230a6b598e3fb87a065e91 (diff) |
Import arduinojson and ubjson. Only partially working at the moment
Diffstat (limited to 'include/lib/ArduinoJson/JsonVariantOr.hpp')
-rw-r--r-- | include/lib/ArduinoJson/JsonVariantOr.hpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/include/lib/ArduinoJson/JsonVariantOr.hpp b/include/lib/ArduinoJson/JsonVariantOr.hpp new file mode 100644 index 0000000..d8022fc --- /dev/null +++ b/include/lib/ArduinoJson/JsonVariantOr.hpp @@ -0,0 +1,52 @@ +// ArduinoJson - arduinojson.org +// Copyright Benoit Blanchon 2014-2018 +// MIT License + +#pragma once + +#include "Data/JsonVariantAs.hpp" +#include "Polyfills/attributes.hpp" +#include "TypeTraits/EnableIf.hpp" +#include "TypeTraits/IsIntegral.hpp" + +namespace ArduinoJson { +namespace Internals { + +template <typename TImpl> +class JsonVariantOr { + public: + // Returns the default value if the JsonVariant is undefined of incompatible + template <typename T> + typename EnableIf<!IsIntegral<T>::value, T>::type operator|( + const T &defaultValue) const { + if (impl()->template is<T>()) + return impl()->template as<T>(); + else + return defaultValue; + } + + // Returns the default value if the JsonVariant is undefined of incompatible + // Special case for string: null is treated as undefined + const char *operator|(const char *defaultValue) const { + const char *value = impl()->template as<const char *>(); + return value ? value : defaultValue; + } + + // Returns the default value if the JsonVariant is undefined of incompatible + // Special case for integers: we also accept double + template <typename Integer> + typename EnableIf<IsIntegral<Integer>::value, Integer>::type operator|( + const Integer &defaultValue) const { + if (impl()->template is<double>()) + return impl()->template as<Integer>(); + else + return defaultValue; + } + + private: + const TImpl *impl() const { + return static_cast<const TImpl *>(this); + } +}; +} // namespace Internals +} // namespace ArduinoJson |