mirror of
https://github.com/eledio-devices/thirdparty-ArduinoJson.git
synced 2025-11-01 16:14:05 +01:00
Added support for custom converters (closes #687)
This commit is contained in:
@@ -193,6 +193,10 @@ class MemberProxy : public VariantOperators<MemberProxy<TObject, TStringRef> >,
|
||||
return _object.getOrAddMember(_key);
|
||||
}
|
||||
|
||||
friend bool convertToJson(VariantRef variant, const this_type &value) {
|
||||
return variant.set(value.getUpstreamMember());
|
||||
}
|
||||
|
||||
TObject _object;
|
||||
TStringRef _key;
|
||||
};
|
||||
|
||||
@@ -236,4 +236,42 @@ class ObjectRef : public ObjectRefBase<CollectionData>,
|
||||
private:
|
||||
MemoryPool* _pool;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct Converter<ObjectConstRef> {
|
||||
static bool toJson(VariantRef variant, VariantConstRef value) {
|
||||
return variantCopyFrom(getData(variant), getData(value), getPool(variant));
|
||||
}
|
||||
|
||||
static ObjectConstRef fromJson(VariantConstRef variant) {
|
||||
return ObjectConstRef(variantAsObject(getData(variant)));
|
||||
}
|
||||
|
||||
static bool checkJson(VariantConstRef variant) {
|
||||
const VariantData* data = getData(variant);
|
||||
return data && data->isObject();
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct Converter<ObjectRef> {
|
||||
static bool toJson(VariantRef variant, VariantConstRef value) {
|
||||
return variantCopyFrom(getData(variant), getData(value), getPool(variant));
|
||||
}
|
||||
|
||||
static ObjectRef fromJson(VariantRef variant) {
|
||||
VariantData* data = getData(variant);
|
||||
MemoryPool* pool = getPool(variant);
|
||||
return ObjectRef(pool, data != 0 ? data->asObject() : 0);
|
||||
}
|
||||
|
||||
static bool checkJson(VariantConstRef) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool checkJson(VariantRef variant) {
|
||||
VariantData* data = getData(variant);
|
||||
return data && data->isObject();
|
||||
}
|
||||
};
|
||||
} // namespace ARDUINOJSON_NAMESPACE
|
||||
|
||||
Reference in New Issue
Block a user