// 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 class JsonVariantOr { public: // Returns the default value if the JsonVariant is undefined of incompatible template typename EnableIf::value, T>::type operator|( const T &defaultValue) const { if (impl()->template is()) return impl()->template as(); 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(); 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 EnableIf::value, Integer>::type operator|( const Integer &defaultValue) const { if (impl()->template is()) return impl()->template as(); else return defaultValue; } private: const TImpl *impl() const { return static_cast(this); } }; } // namespace Internals } // namespace ArduinoJson