mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-10-30 14:11:37 +01:00
56 lines
976 B
C++
56 lines
976 B
C++
// 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));
|
|
}
|