#pragma once #include #include #include namespace RenderCadenceCompositor { class JsonWriter { public: void BeginObject(); void EndObject(); void BeginArray(); void EndArray(); void Key(const std::string& name); void String(const std::string& value); void Bool(bool value); void Null(); void Int(int64_t value); void UInt(uint64_t value); void Double(double value); void KeyString(const std::string& name, const std::string& value); void KeyBool(const std::string& name, bool value); void KeyNull(const std::string& name); void KeyInt(const std::string& name, int64_t value); void KeyUInt(const std::string& name, uint64_t value); void KeyDouble(const std::string& name, double value); std::string StringValue() const; void Reset(); static std::string EscapeString(const std::string& value); private: enum class ScopeKind { Object, Array }; struct Scope { ScopeKind kind = ScopeKind::Object; bool first = true; bool expectingValue = false; }; void BeginValue(); void BeginKey(); void PushScope(ScopeKind kind); void PopScope(ScopeKind kind); std::ostringstream mStream; Scope mScopes[32]; int mScopeDepth = 0; }; }