@@ -25,9 +25,10 @@ struct Converter {
2525 " type 'char' is not supported, use 'signed char', 'unsigned "
2626 " char' or another integer type instead" );
2727
28- static void toJson (const T& src, JsonVariant dst) {
28+ static auto toJson (const T& src, JsonVariant dst)
29+ -> decltype(convertToJson(src, dst)) {
2930 // clang-format off
30- convertToJson (src, dst); // Error here? See https://arduinojson.org/v7/unsupported-set/
31+ return convertToJson (src, dst); // Error here? See https://arduinojson.org/v7/unsupported-set/
3132 // clang-format on
3233 }
3334
@@ -124,8 +125,8 @@ struct Converter<T, detail::enable_if_t<detail::is_floating_point<T>::value>>
124125
125126template <>
126127struct Converter <const char *> : private detail::VariantAttorney {
127- static void toJson (const char * src, JsonVariant dst) {
128- getVariantImpl (dst).setString (detail::adaptString (src));
128+ static bool toJson (const char * src, JsonVariant dst) {
129+ return getVariantImpl (dst).setString (detail::adaptString (src));
129130 }
130131
131132 static const char * fromJson (JsonVariantConst src) {
@@ -176,8 +177,8 @@ struct Converter<SerializedValue<T>> : private detail::VariantAttorney {
176177
177178template <>
178179struct Converter <detail::nullptr_t > : private detail::VariantAttorney {
179- static void toJson (detail::nullptr_t , JsonVariant dst) {
180- getVariantImpl (dst).clear ();
180+ static bool toJson (detail::nullptr_t , JsonVariant dst) {
181+ return getVariantImpl (dst).clear ();
181182 }
182183 static detail::nullptr_t fromJson (JsonVariantConst) {
183184 return nullptr ;
@@ -225,17 +226,18 @@ class StringBuilderPrint : public Print {
225226};
226227} // namespace detail
227228
228- inline void convertToJson (const ::Printable& src, JsonVariant dst) {
229+ inline bool convertToJson (const ::Printable& src, JsonVariant dst) {
229230 auto resources = detail::VariantAttorney::getResourceManager (dst);
230231 auto data = detail::VariantAttorney::getData (dst);
231232 if (!resources || !data)
232- return ;
233+ return false ;
233234 detail::VariantImpl::clear (data, resources);
234235 detail::StringBuilderPrint print (resources);
235236 src.printTo (print);
236237 if (print.overflowed ())
237- return ;
238+ return false ;
238239 print.save (data);
240+ return true ;
239241}
240242
241243#endif
@@ -288,11 +290,11 @@ inline bool canConvertFromJson(JsonVariantConst src, const std::string_view&) {
288290
289291template <>
290292struct Converter <JsonArrayConst> : private detail::VariantAttorney {
291- static void toJson (JsonArrayConst src, JsonVariant dst) {
293+ static bool toJson (JsonArrayConst src, JsonVariant dst) {
292294 if (src.isNull ())
293- dst.set (nullptr );
295+ return dst.set (nullptr );
294296 else
295- dst.to <JsonArray>().set (src);
297+ return dst.to <JsonArray>().set (src);
296298 }
297299
298300 static JsonArrayConst fromJson (JsonVariantConst src) {
@@ -307,11 +309,11 @@ struct Converter<JsonArrayConst> : private detail::VariantAttorney {
307309
308310template <>
309311struct Converter <JsonArray> : private detail::VariantAttorney {
310- static void toJson (JsonVariantConst src, JsonVariant dst) {
312+ static bool toJson (JsonVariantConst src, JsonVariant dst) {
311313 if (src.isNull ())
312- dst.set (nullptr );
314+ return dst.set (nullptr );
313315 else
314- dst.to <JsonArray>().set (src);
316+ return dst.to <JsonArray>().set (src);
315317 }
316318
317319 static JsonArray fromJson (JsonVariant src) {
@@ -326,11 +328,11 @@ struct Converter<JsonArray> : private detail::VariantAttorney {
326328
327329template <>
328330struct Converter <JsonObjectConst> : private detail::VariantAttorney {
329- static void toJson (JsonVariantConst src, JsonVariant dst) {
331+ static bool toJson (JsonVariantConst src, JsonVariant dst) {
330332 if (src.isNull ())
331- dst.set (nullptr );
333+ return dst.set (nullptr );
332334 else
333- dst.to <JsonObject>().set (src);
335+ return dst.to <JsonObject>().set (src);
334336 }
335337
336338 static JsonObjectConst fromJson (JsonVariantConst src) {
@@ -345,11 +347,11 @@ struct Converter<JsonObjectConst> : private detail::VariantAttorney {
345347
346348template <>
347349struct Converter <JsonObject> : private detail::VariantAttorney {
348- static void toJson (JsonVariantConst src, JsonVariant dst) {
350+ static bool toJson (JsonVariantConst src, JsonVariant dst) {
349351 if (src.isNull ())
350- dst.set (nullptr );
352+ return dst.set (nullptr );
351353 else
352- dst.to <JsonObject>().set (src);
354+ return dst.to <JsonObject>().set (src);
353355 }
354356
355357 static JsonObject fromJson (JsonVariant src) {
0 commit comments