Added operator|(JsonVariantConst, JsonVariantConst)

This commit is contained in:
Benoit Blanchon
2020-09-26 14:48:17 +02:00
parent fee029b86e
commit 726f8be341
4 changed files with 61 additions and 4 deletions

View File

@ -139,4 +139,9 @@ template <typename TString>
inline VariantRef VariantRef::getOrAddMember(const TString &key) const {
return VariantRef(_pool, variantGetOrAddMember(_data, key, _pool));
}
inline VariantConstRef operator|(VariantConstRef preferedValue,
VariantConstRef defaultValue) {
return preferedValue ? preferedValue : defaultValue;
}
} // namespace ARDUINOJSON_NAMESPACE

View File

@ -19,7 +19,8 @@ template <typename TVariant>
struct VariantOperators {
// Returns the default value if the VariantRef is undefined of incompatible
template <typename T>
friend T operator|(const TVariant &variant, const T &defaultValue) {
friend typename enable_if<!IsVisitable<T>::value, T>::type operator|(
const TVariant &variant, const T &defaultValue) {
if (variant.template is<T>())
return variant.template as<T>();
else
@ -28,8 +29,9 @@ struct VariantOperators {
// Returns the default value if the VariantRef is undefined of incompatible
// Special case for string: null is treated as undefined
friend const char *operator|(const TVariant &variant,
const char *defaultValue) {
template <typename T>
friend typename enable_if<is_same<T, const char *>::value, T>::type operator|(
const TVariant &variant, T defaultValue) {
const char *value = variant.template as<const char *>();
return value ? value : defaultValue;
}