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;
|
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,
|
template <template <typename> class TDeserializer, typename TDestination,
|
||||||
typename TReader, typename TOptions>
|
typename TReader, typename TOptions>
|
||||||
DeserializationError doDeserialize(TDestination&& dst, TReader reader,
|
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.
|
// Parses a JSON input, filters, and puts the result in a JsonDocument.
|
||||||
// https://arduinojson.org/v6/api/json/deserializejson/
|
// https://arduinojson.org/v6/api/json/deserializejson/
|
||||||
template <typename TDestination, typename... Args>
|
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;
|
using namespace detail;
|
||||||
return deserialize<JsonDeserializer>(detail::forward<TDestination>(dst),
|
return deserialize<JsonDeserializer>(detail::forward<TDestination>(dst),
|
||||||
detail::forward<Args>(args)...);
|
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.
|
// Parses a JSON input, filters, and puts the result in a JsonDocument.
|
||||||
// https://arduinojson.org/v6/api/json/deserializejson/
|
// https://arduinojson.org/v6/api/json/deserializejson/
|
||||||
template <typename TDestination, typename TChar, typename... Args>
|
template <typename TDestination, typename TChar, typename... Args>
|
||||||
DeserializationError deserializeJson(TDestination&& dst, TChar* input,
|
typename detail::enable_if<
|
||||||
Args&&... args) {
|
detail::is_deserialize_destination<TDestination>::value,
|
||||||
|
DeserializationError>::type
|
||||||
|
deserializeJson(TDestination&& dst, TChar* input, Args&&... args) {
|
||||||
using namespace detail;
|
using namespace detail;
|
||||||
return deserialize<JsonDeserializer>(detail::forward<TDestination>(dst),
|
return deserialize<JsonDeserializer>(detail::forward<TDestination>(dst),
|
||||||
input, detail::forward<Args>(args)...);
|
input, detail::forward<Args>(args)...);
|
||||||
|
@ -561,7 +561,10 @@ ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE
|
|||||||
// Parses a MessagePack input and puts the result in a JsonDocument.
|
// Parses a MessagePack input and puts the result in a JsonDocument.
|
||||||
// https://arduinojson.org/v6/api/msgpack/deserializemsgpack/
|
// https://arduinojson.org/v6/api/msgpack/deserializemsgpack/
|
||||||
template <typename TDestination, typename... Args>
|
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;
|
using namespace detail;
|
||||||
return deserialize<MsgPackDeserializer>(detail::forward<TDestination>(dst),
|
return deserialize<MsgPackDeserializer>(detail::forward<TDestination>(dst),
|
||||||
detail::forward<Args>(args)...);
|
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.
|
// Parses a MessagePack input and puts the result in a JsonDocument.
|
||||||
// https://arduinojson.org/v6/api/msgpack/deserializemsgpack/
|
// https://arduinojson.org/v6/api/msgpack/deserializemsgpack/
|
||||||
template <typename TDestination, typename TChar, typename... Args>
|
template <typename TDestination, typename TChar, typename... Args>
|
||||||
DeserializationError deserializeMsgPack(TDestination&& dst, TChar* input,
|
typename detail::enable_if<
|
||||||
Args&&... args) {
|
detail::is_deserialize_destination<TDestination>::value,
|
||||||
|
DeserializationError>::type
|
||||||
|
deserializeMsgPack(TDestination&& dst, TChar* input, Args&&... args) {
|
||||||
using namespace detail;
|
using namespace detail;
|
||||||
return deserialize<MsgPackDeserializer>(detail::forward<TDestination>(dst),
|
return deserialize<MsgPackDeserializer>(detail::forward<TDestination>(dst),
|
||||||
input,
|
input,
|
||||||
|
Reference in New Issue
Block a user