Program Listing for File JSON.h
↰ Return to documentation for file (axr.sdk/JSON.h
)
// Copyright (C) AcceleratXR, Inc. All rights reserved.
#pragma once
#include "Date.h"
#include <any>
#include <cpprest/details/basic_types.h>
#include <memory.h>
#include <rapidjson/document.h>
#include <rapidjson/stringbuffer.h>
#include <rapidjson/writer.h>
#include <variant>
#include <vector>
namespace axr {
namespace sdk {
namespace json {
#ifdef _UTF16_STRINGS
typedef rapidjson::GenericDocument<rapidjson::UTF16<>> Document;
typedef rapidjson::GenericValue<rapidjson::UTF16<>> Value;
typedef rapidjson::GenericStringBuffer<rapidjson::UTF16<>> StringBuffer;
typedef rapidjson::GenericStringStream<rapidjson::UTF16<>> StringStream;
typedef rapidjson::Writer<StringBuffer, rapidjson::UTF16<>> StringWriter;
#else
typedef rapidjson::GenericDocument<rapidjson::UTF8<>> Document;
typedef rapidjson::GenericValue<rapidjson::UTF8<>> Value;
typedef rapidjson::GenericStringBuffer<rapidjson::UTF8<>> StringBuffer;
typedef rapidjson::GenericStringStream<rapidjson::UTF8<>> StringStream;
typedef rapidjson::Writer<StringBuffer, rapidjson::UTF8<>> StringWriter;
#endif
}
class Object;
class Variant;
class Variant : public std::variant<std::monostate, bool, double, std::shared_ptr<Object>, std::vector<Variant>, datetime, utility::string_t, int64_t>
{
public:
using base = std::variant<std::monostate, bool, double, std::shared_ptr<Object>, std::vector<Variant>, datetime, utility::string_t, int64_t>;
using base::base;
using base::operator=;
Variant() : base(std::monostate()) {}
Variant(float value) : base((double)value) {}
Variant(int8_t value) : base((int64_t)value) {}
Variant(uint8_t value) : base((int64_t)value) {}
Variant(int16_t value) : base((int64_t)value) {}
Variant(uint16_t value) : base((int64_t)value) {}
Variant(int32_t value) : base((int64_t)value) {}
Variant(uint32_t value) : base((int64_t)value) {}
Variant(uint64_t value) : base((int64_t)value) {}
Variant(const utility::char_t* value) : base(utility::string_t(value)) {}
~Variant() {}
static Variant Parse(const utility::string_t& json);
void ToString(json::StringWriter& writer) const;
utility::string_t ToString() const;
};
namespace json {
Variant ToVariant(const Value& value);
utility::string_t ToString(const Document& value);
utility::string_t ToString(std::shared_ptr<Document> value);
utility::string_t ToString(const Value& value);
utility::string_t ToString(std::shared_ptr<Value> value);
} // namespace json
} // namespace sdk
} // namespace axr