123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #pragma once
- #include "json_output.h"
- #include <library/cpp/json/writer/json_value.h>
- #include <util/generic/stack.h>
- namespace NProtobufJson {
- class TJsonValueOutput: public IJsonOutput {
- public:
- TJsonValueOutput(NJson::TJsonValue& value)
- : Root(value)
- {
- Context.emplace(TContext::JSON_AFTER_KEY, Root);
- }
- void DoWrite(const TStringBuf& s) override;
- void DoWrite(const TString& s) override;
- void DoWrite(int i) override;
- void DoWrite(unsigned int i) override;
- void DoWrite(long long i) override;
- void DoWrite(unsigned long long i) override;
- void DoWrite(float f) override;
- void DoWrite(double f) override;
- void DoWrite(bool b) override;
- void DoWriteNull() override;
- void DoBeginList() override;
- void DoEndList() override;
- void DoBeginObject() override;
- void DoWriteKey(const TStringBuf& key) override;
- void DoEndObject() override;
- void DoWriteRawJson(const TStringBuf& str) override;
- private:
- template <typename T>
- void WriteImpl(const T& t);
- struct TContext {
- enum EType {
- JSON_MAP,
- JSON_ARRAY,
- JSON_AFTER_KEY,
- };
- TContext(EType type, NJson::TJsonValue& value)
- : Type(type)
- , Value(value)
- {
- }
- EType Type;
- NJson::TJsonValue& Value;
- };
- NJson::TJsonValue& Root;
- TStack<TContext, TVector<TContext>> Context;
- };
- }
|