forked from bblanchon/ArduinoJson
Add an enable_if
to validate the first argument to deserializeXxx()
This commit is contained in:
@ -22,6 +22,18 @@ struct first_or_void<T, Rest...> {
|
||||
using type = T;
|
||||
};
|
||||
|
||||
// A meta-function that returns true if T is a valid destination type for
|
||||
// deserialize()
|
||||
template <class T, class = void>
|
||||
struct is_deserialize_destination : false_type {};
|
||||
|
||||
template <class T>
|
||||
struct is_deserialize_destination<
|
||||
T, typename enable_if<is_same<decltype(VariantAttorney::getResourceManager(
|
||||
detail::declval<T&>())),
|
||||
ResourceManager*>::value>::type> : true_type {
|
||||
};
|
||||
|
||||
template <template <typename> class TDeserializer, typename TDestination,
|
||||
typename TReader, typename TOptions>
|
||||
DeserializationError doDeserialize(TDestination&& dst, TReader reader,
|
||||
|
@ -671,7 +671,10 @@ ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE
|
||||
// Parses a JSON input, filters, and puts the result in a JsonDocument.
|
||||
// https://arduinojson.org/v6/api/json/deserializejson/
|
||||
template <typename TDestination, typename... Args>
|
||||
DeserializationError deserializeJson(TDestination&& dst, Args&&... args) {
|
||||
typename detail::enable_if<
|
||||
detail::is_deserialize_destination<TDestination>::value,
|
||||
DeserializationError>::type
|
||||
deserializeJson(TDestination&& dst, Args&&... args) {
|
||||
using namespace detail;
|
||||
return deserialize<JsonDeserializer>(detail::forward<TDestination>(dst),
|
||||
detail::forward<Args>(args)...);
|
||||
@ -680,8 +683,10 @@ DeserializationError deserializeJson(TDestination&& dst, Args&&... args) {
|
||||
// Parses a JSON input, filters, and puts the result in a JsonDocument.
|
||||
// https://arduinojson.org/v6/api/json/deserializejson/
|
||||
template <typename TDestination, typename TChar, typename... Args>
|
||||
DeserializationError deserializeJson(TDestination&& dst, TChar* input,
|
||||
Args&&... args) {
|
||||
typename detail::enable_if<
|
||||
detail::is_deserialize_destination<TDestination>::value,
|
||||
DeserializationError>::type
|
||||
deserializeJson(TDestination&& dst, TChar* input, Args&&... args) {
|
||||
using namespace detail;
|
||||
return deserialize<JsonDeserializer>(detail::forward<TDestination>(dst),
|
||||
input, detail::forward<Args>(args)...);
|
||||
|
@ -561,7 +561,10 @@ ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE
|
||||
// Parses a MessagePack input and puts the result in a JsonDocument.
|
||||
// https://arduinojson.org/v6/api/msgpack/deserializemsgpack/
|
||||
template <typename TDestination, typename... Args>
|
||||
DeserializationError deserializeMsgPack(TDestination&& dst, Args&&... args) {
|
||||
typename detail::enable_if<
|
||||
detail::is_deserialize_destination<TDestination>::value,
|
||||
DeserializationError>::type
|
||||
deserializeMsgPack(TDestination&& dst, Args&&... args) {
|
||||
using namespace detail;
|
||||
return deserialize<MsgPackDeserializer>(detail::forward<TDestination>(dst),
|
||||
detail::forward<Args>(args)...);
|
||||
@ -570,8 +573,10 @@ DeserializationError deserializeMsgPack(TDestination&& dst, Args&&... args) {
|
||||
// Parses a MessagePack input and puts the result in a JsonDocument.
|
||||
// https://arduinojson.org/v6/api/msgpack/deserializemsgpack/
|
||||
template <typename TDestination, typename TChar, typename... Args>
|
||||
DeserializationError deserializeMsgPack(TDestination&& dst, TChar* input,
|
||||
Args&&... args) {
|
||||
typename detail::enable_if<
|
||||
detail::is_deserialize_destination<TDestination>::value,
|
||||
DeserializationError>::type
|
||||
deserializeMsgPack(TDestination&& dst, TChar* input, Args&&... args) {
|
||||
using namespace detail;
|
||||
return deserialize<MsgPackDeserializer>(detail::forward<TDestination>(dst),
|
||||
input,
|
||||
|
Reference in New Issue
Block a user