Extracted class JsonSerializer

This commit is contained in:
Benoit Blanchon
2016-09-11 13:43:21 +02:00
parent 6757f35a3a
commit a60b35f41c
12 changed files with 160 additions and 94 deletions

View File

@@ -36,6 +36,9 @@ class JsonObject;
// - a string (const char*)
// - a reference to a JsonArray or JsonObject
class JsonVariant : public JsonVariantBase<JsonVariant> {
friend void Internals::JsonSerializer::serialize(const JsonVariant &,
JsonWriter &);
public:
template <typename T>
struct IsConstructibleFrom;
@@ -211,6 +214,14 @@ class JsonVariant : public JsonVariantBase<JsonVariant> {
as() const {
return asObject();
}
//
// JsonVariant as<JsonVariant> const;
template <typename T>
typename TypeTraits::EnableIf<TypeTraits::IsSame<T, JsonVariant>::value,
T>::type
as() const {
return *this;
}
// Tells weither the variant has the specified type.
// Returns true if the variant has type type T, false otherwise.
@@ -266,9 +277,9 @@ class JsonVariant : public JsonVariantBase<JsonVariant> {
return isArray();
}
//
// JsonObject& as<JsonObject> const;
// JsonObject& as<JsonObject&> const;
// JsonObject& as<const JsonObject&> const;
// bool is<JsonObject> const;
// bool is<JsonObject&> const;
// bool is<const JsonObject&> const;
template <typename T>
typename TypeTraits::EnableIf<
TypeTraits::IsSame<
@@ -285,9 +296,6 @@ class JsonVariant : public JsonVariantBase<JsonVariant> {
return _type != Internals::JSON_UNDEFINED;
}
// Serialize the variant to a JsonWriter
void writeTo(Internals::JsonWriter &writer) const;
// Value returned if the variant has an incompatible type
template <typename T>
static typename Internals::JsonVariantAs<T>::type defaultValue() {