Files
FlaxEngine/Source/Engine/Serialization/JsonWriters.h
Wojtek Figat dab44f5ceb Minor fixes
2025-10-16 10:20:51 +02:00

179 lines
3.5 KiB
C++

// Copyright (c) Wojciech Figat. All rights reserved.
#pragma once
#include "Json.h"
#include "JsonWriter.h"
template<typename WriterType>
class JsonWriterBase : public JsonWriter
{
protected:
WriterType writer;
public:
/// <summary>
/// Initializes a new instance of the <see cref="JsonWriterBase"/> class.
/// </summary>
/// <param name="buffer">The output buffer.</param>
JsonWriterBase(rapidjson_flax::StringBuffer& buffer)
: JsonWriter()
, writer(buffer)
{
}
public:
FORCE_INLINE WriterType& GetWriter()
{
return writer;
}
public:
using JsonWriter::Key;
// [JsonWriter]
void Key(const char* str, int32 length) override
{
writer.Key(str, static_cast<rapidjson::SizeType>(length));
}
void String(const char* str, int32 length) override
{
writer.String(str, length);
}
void RawValue(const char* json, int32 length) override
{
writer.RawValue(json, length);
}
void Bool(bool d) override
{
writer.Bool(d);
}
void Int(int32 d) override
{
writer.Int(d);
}
void Int64(int64 d) override
{
writer.Int64(d);
}
void Uint(uint32 d) override
{
writer.Uint(d);
}
void Uint64(uint64 d) override
{
writer.Uint64(d);
}
void Float(float d) override
{
writer.Float(d);
}
void Double(double d) override
{
writer.Double(d);
}
void StartObject() override
{
writer.StartObject();
}
void EndObject() override
{
writer.EndObject();
}
void StartArray() override
{
writer.StartArray();
}
void EndArray(int32 count = 0) override
{
writer.EndArray(count);
}
};
class FLAXENGINE_API CompactJsonWriterImpl : public rapidjson_flax::Writer<rapidjson_flax::StringBuffer>
{
public:
/// <summary>
/// Initializes a new instance of the <see cref="CompactJsonWriterImpl"/> class.
/// </summary>
/// <param name="buffer">The buffer.</param>
CompactJsonWriterImpl(rapidjson_flax::StringBuffer& buffer)
: Writer(buffer)
{
}
public:
void RawValue(const char* json, int32 length)
{
Prefix(rapidjson::kObjectType);
WriteRawValue(json, length);
}
void Float(float d)
{
Prefix(rapidjson::kNumberType);
WriteDouble(d);
}
};
/// <summary>
/// Json writer creating compact and optimized text.
/// </summary>
typedef JsonWriterBase<CompactJsonWriterImpl> CompactJsonWriter;
class FLAXENGINE_API PrettyJsonWriterImpl : public rapidjson_flax::PrettyWriter<rapidjson_flax::StringBuffer>
{
public:
typedef rapidjson_flax::PrettyWriter<rapidjson_flax::StringBuffer> Writer;
public:
/// <summary>
/// Initializes a new instance of the <see cref="PrettyJsonWriterImpl"/> class.
/// </summary>
/// <param name="buffer">The buffer.</param>
PrettyJsonWriterImpl(rapidjson_flax::StringBuffer& buffer)
: Writer(buffer)
{
SetIndent('\t', 1);
}
public:
FORCE_INLINE void RawValue(const char* json, int32 length)
{
PrettyPrefix(rapidjson::kObjectType);
WriteRawValue(json, length);
}
FORCE_INLINE void Float(float d)
{
PrettyPrefix(rapidjson::kNumberType);
WriteDouble(d);
}
};
/// <summary>
/// Json writer creating prettify text.
/// </summary>
typedef JsonWriterBase<PrettyJsonWriterImpl> PrettyJsonWriter;