| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // ArduinoJson - https://arduinojson.org
- // Copyright © 2014-2025, Benoit BLANCHON
- // MIT License
- #include <ArduinoJson.h>
- #include <catch.hpp>
- template <typename T>
- class Nullable {
- public:
- Nullable() : value_{} {}
- Nullable(T value) : value_{value} {}
- operator T() const {
- return value_;
- }
- operator T&() {
- return value_;
- }
- bool is_valid() const {
- return value_ != invalid_value_;
- }
- T value() const {
- return value_;
- }
- private:
- T value_;
- static T invalid_value_;
- };
- template <>
- float Nullable<float>::invalid_value_ = std::numeric_limits<float>::lowest();
- template <typename T>
- void convertToJson(const Nullable<T>& src, JsonVariant dst) {
- if (src.is_valid()) {
- dst.set(src.value());
- } else {
- dst.clear();
- }
- }
- TEST_CASE("Issue #2129") {
- Nullable<float> nullable_value = Nullable<float>{123.4f};
- JsonDocument doc;
- doc["value"] = nullable_value;
- REQUIRE(doc["value"].as<float>() == Approx(123.4f));
- }
|