Removed friend relationship between JsonVariant and JsonSerializer

This commit is contained in:
Benoit Blanchon
2018-03-23 09:20:50 +01:00
parent 0d1623edef
commit 923d3e8a84
3 changed files with 75 additions and 42 deletions

View File

@@ -27,10 +27,6 @@ namespace ArduinoJson {
// Forward declarations.
class JsonArray;
class JsonObject;
namespace Internals {
template <typename Print>
class JsonSerializer;
}
// A variant that can be a any value serializable to a JSON value.
//
@@ -40,9 +36,6 @@ class JsonSerializer;
// - a string (const char*)
// - a reference to a JsonArray or JsonObject
class JsonVariant : public Internals::JsonVariantBase<JsonVariant> {
template <typename Print>
friend class Internals::JsonSerializer;
public:
// Creates an uninitialized JsonVariant
JsonVariant() : _type(Internals::JSON_UNDEFINED) {}
@@ -317,6 +310,39 @@ class JsonVariant : public Internals::JsonVariantBase<JsonVariant> {
return _type != Internals::JSON_UNDEFINED;
}
template <typename Visitor>
void visit(Visitor visitor) const {
using namespace Internals;
switch (_type) {
case JSON_FLOAT:
return visitor.acceptFloat(_content.asFloat);
case JSON_ARRAY:
return visitor.acceptArray(*_content.asArray);
case JSON_OBJECT:
return visitor.acceptObject(*_content.asObject);
case JSON_STRING:
return visitor.acceptString(_content.asString);
case JSON_UNPARSED:
return visitor.acceptRawJson(_content.asString);
case JSON_NEGATIVE_INTEGER:
return visitor.acceptNegativeInteger(_content.asInteger);
case JSON_POSITIVE_INTEGER:
return visitor.acceptPositiveInteger(_content.asInteger);
case JSON_BOOLEAN:
return visitor.acceptBoolean(_content.asInteger != 0);
default: // JSON_UNDEFINED
return visitor.acceptUndefined();
}
}
private:
JsonArray &variantAsArray() const;
JsonObject &variantAsObject() const;