Browse Source

VariantConverter: Use FromVar and ToVar as a fallback

v7.0.9
reuk 1 year ago
parent
commit
d8b71b4eef
No known key found for this signature in database GPG Key ID: FCB43929F012EE5C
2 changed files with 49 additions and 22 deletions
  1. +0
    -22
      modules/juce_core/containers/juce_Variant.h
  2. +49
    -0
      modules/juce_core/javascript/juce_JSONSerialisation.h

+ 0
- 22
modules/juce_core/containers/juce_Variant.h View File

@@ -340,26 +340,4 @@ JUCE_API bool operator== (const var&, const String&);
JUCE_API bool operator!= (const var&, const String&);
JUCE_API bool operator== (const var&, const char*);
JUCE_API bool operator!= (const var&, const char*);
//==============================================================================
/** This template-overloaded class can be used to convert between var and custom types.
@tags{Core}
*/
template <typename Type>
struct VariantConverter
{
static Type fromVar (const var& v) { return static_cast<Type> (v); }
static var toVar (const Type& t) { return t; }
};
#ifndef DOXYGEN
template <>
struct VariantConverter<String>
{
static String fromVar (const var& v) { return v.toString(); }
static var toVar (const String& s) { return s; }
};
#endif
} // namespace juce

+ 49
- 0
modules/juce_core/javascript/juce_JSONSerialisation.h View File

@@ -456,4 +456,53 @@ private:
};
};
//==============================================================================
/**
This template-overloaded class can be used to convert between var and custom types.
If not specialised, the variant converter will attempt to use serialisation functions
if they are detected for the given type.
For details of what this entails, see the docs for SerialisationTraits.
In short, the constant 'marshallingVersion', and either the single function 'serialise()', or
the function pair 'load()' and 'save()' must be defined for the type. These may be defined
as public members of the type T itself, or as public members of juce::SerialisationTraits<T>,
which is a specialisation of the SerialisationTraits template struct for the type T.
@see ToVar, FromVar
@tags{Core}
*/
template <typename Type>
struct VariantConverter
{
static Type fromVar (const var& v)
{
if constexpr (detail::serialisationKind<Type> != detail::SerialisationKind::none)
{
auto converted = FromVar::convert<Type> (v);
jassert (converted.has_value());
return std::move (converted).value_or (Type{});
}
else
{
return static_cast<Type> (v);
}
}
static var toVar (const Type& t)
{
if constexpr (detail::serialisationKind<Type> != detail::SerialisationKind::none)
{
auto converted = ToVar::convert<> (t);
jassert (converted.has_value());
return std::move (converted).value_or (var{});
}
else
{
return t;
}
}
};
} // namespace juce

Loading…
Cancel
Save