@@ -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
@@ -60,9 +61,9 @@ struct Converter<T, detail::enable_if_t<detail::is_integral<T>::value &&
6061 : private detail::VariantAttorney {
6162 static bool toJson (T src, JsonVariant dst) {
6263 ARDUINOJSON_ASSERT_INTEGER_TYPE_IS_SUPPORTED (T);
63- auto variant = getImpl (dst);
64- variant .clear ();
65- return variant .setInteger (src);
64+ auto impl = getImpl (dst);
65+ impl .clear ();
66+ return impl .setInteger (src);
6667 }
6768
6869 static T fromJson (JsonVariantConst src) {
@@ -128,10 +129,10 @@ struct Converter<T, detail::enable_if_t<detail::is_floating_point<T>::value>>
128129
129130template <>
130131struct Converter <const char *> : private detail::VariantAttorney {
131- static void toJson (const char * src, JsonVariant dst) {
132+ static bool toJson (const char * src, JsonVariant dst) {
132133 auto impl = getImpl (dst);
133134 impl.clear ();
134- impl.setString (detail::adaptString (src));
135+ return impl.setString (detail::adaptString (src));
135136 }
136137
137138 static const char * fromJson (JsonVariantConst src) {
@@ -145,10 +146,10 @@ struct Converter<const char*> : private detail::VariantAttorney {
145146
146147template <>
147148struct Converter <JsonString> : private detail::VariantAttorney {
148- static void toJson (JsonString src, JsonVariant dst) {
149+ static bool toJson (JsonString src, JsonVariant dst) {
149150 auto impl = getImpl (dst);
150151 impl.clear ();
151- impl.setString (detail::adaptString (src));
152+ return impl.setString (detail::adaptString (src));
152153 }
153154
154155 static JsonString fromJson (JsonVariantConst src) {
@@ -161,11 +162,11 @@ struct Converter<JsonString> : private detail::VariantAttorney {
161162};
162163
163164template <typename T>
164- inline detail::enable_if_t <detail::IsString<T>::value> convertToJson (
165+ inline detail::enable_if_t <detail::IsString<T>::value, bool > convertToJson (
165166 const T& src, JsonVariant dst) {
166- auto variant = detail::VariantAttorney::getImpl (dst);
167- variant .clear ();
168- variant .setString (detail::adaptString (src));
167+ auto impl = detail::VariantAttorney::getImpl (dst);
168+ impl .clear ();
169+ return impl .setString (detail::adaptString (src));
169170}
170171
171172// SerializedValue<std::string>
@@ -174,16 +175,19 @@ inline detail::enable_if_t<detail::IsString<T>::value> convertToJson(
174175template <typename T>
175176struct Converter <SerializedValue<T>> : private detail::VariantAttorney {
176177 static bool toJson (SerializedValue<T> src, JsonVariant dst) {
177- auto variant = getImpl (dst);
178- variant .clear ();
179- return variant .setRawString (detail::adaptString (src.data (), src.size ()));
178+ auto impl = getImpl (dst);
179+ impl .clear ();
180+ return impl .setRawString (detail::adaptString (src.data (), src.size ()));
180181 }
181182};
182183
183184template <>
184185struct Converter <detail::nullptr_t > : private detail::VariantAttorney {
185- static void toJson (detail::nullptr_t , JsonVariant dst) {
186+ static bool toJson (detail::nullptr_t , JsonVariant dst) {
187+ if (dst.isUnbound ())
188+ return false ;
186189 getImpl (dst).clear ();
190+ return true ;
187191 }
188192 static detail::nullptr_t fromJson (JsonVariantConst) {
189193 return nullptr ;
@@ -230,16 +234,17 @@ class StringBuilderPrint : public Print {
230234};
231235} // namespace detail
232236
233- inline void convertToJson (const ::Printable& src, JsonVariant dst) {
237+ inline bool convertToJson (const ::Printable& src, JsonVariant dst) {
234238 auto impl = detail::VariantAttorney::getImpl (dst);
235239 if (impl.isUnbound ())
236- return ;
240+ return false ;
237241 impl.clear ();
238242 detail::StringBuilderPrint print (impl.resources ());
239243 src.printTo (print);
240244 if (print.overflowed ())
241- return ;
245+ return false ;
242246 print.save (impl.data ());
247+ return true ;
243248}
244249
245250#endif
@@ -292,11 +297,11 @@ inline bool canConvertFromJson(JsonVariantConst src, const std::string_view&) {
292297
293298template <>
294299struct Converter <JsonArrayConst> : private detail::VariantAttorney {
295- static void toJson (JsonArrayConst src, JsonVariant dst) {
300+ static bool toJson (JsonArrayConst src, JsonVariant dst) {
296301 if (src.isNull ())
297- dst.set (nullptr );
302+ return dst.set (nullptr );
298303 else
299- dst.to <JsonArray>().set (src);
304+ return dst.to <JsonArray>().set (src);
300305 }
301306
302307 static JsonArrayConst fromJson (JsonVariantConst src) {
@@ -310,11 +315,11 @@ struct Converter<JsonArrayConst> : private detail::VariantAttorney {
310315
311316template <>
312317struct Converter <JsonArray> : private detail::VariantAttorney {
313- static void toJson (JsonVariantConst src, JsonVariant dst) {
318+ static bool toJson (JsonVariantConst src, JsonVariant dst) {
314319 if (src.isNull ())
315- dst.set (nullptr );
320+ return dst.set (nullptr );
316321 else
317- dst.to <JsonArray>().set (src);
322+ return dst.to <JsonArray>().set (src);
318323 }
319324
320325 static JsonArray fromJson (JsonVariant src) {
@@ -328,11 +333,11 @@ struct Converter<JsonArray> : private detail::VariantAttorney {
328333
329334template <>
330335struct Converter <JsonObjectConst> : private detail::VariantAttorney {
331- static void toJson (JsonVariantConst src, JsonVariant dst) {
336+ static bool toJson (JsonVariantConst src, JsonVariant dst) {
332337 if (src.isNull ())
333- dst.set (nullptr );
338+ return dst.set (nullptr );
334339 else
335- dst.to <JsonObject>().set (src);
340+ return dst.to <JsonObject>().set (src);
336341 }
337342
338343 static JsonObjectConst fromJson (JsonVariantConst src) {
@@ -346,11 +351,11 @@ struct Converter<JsonObjectConst> : private detail::VariantAttorney {
346351
347352template <>
348353struct Converter <JsonObject> : private detail::VariantAttorney {
349- static void toJson (JsonVariantConst src, JsonVariant dst) {
354+ static bool toJson (JsonVariantConst src, JsonVariant dst) {
350355 if (src.isNull ())
351- dst.set (nullptr );
356+ return dst.set (nullptr );
352357 else
353- dst.to <JsonObject>().set (src);
358+ return dst.to <JsonObject>().set (src);
354359 }
355360
356361 static JsonObject fromJson (JsonVariant src) {
0 commit comments