diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/yson_pull/writer.h | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/yson_pull/writer.h')
-rw-r--r-- | library/cpp/yson_pull/writer.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/library/cpp/yson_pull/writer.h b/library/cpp/yson_pull/writer.h new file mode 100644 index 0000000000..dec63328be --- /dev/null +++ b/library/cpp/yson_pull/writer.h @@ -0,0 +1,126 @@ +#pragma once + +#include "consumer.h" +#include "output.h" +#include "scalar.h" +#include "stream_type.h" + +#include <memory> + +namespace NYsonPull { + //! \brief YSON writer facade class + //! + //! Owns a YSON consumer and a corresponding output stream. + //! Methods invoke corresponding \p NYsonPull::IConsumer methods and can be chained. + class TWriter { + THolder<NOutput::IStream> Stream_; + THolder<IConsumer> Impl_; + + public: + TWriter( + THolder<NOutput::IStream> stream, + THolder<IConsumer> impl) + : Stream_{std::move(stream)} + , Impl_{std::move(impl)} { + } + + //! \brief Get a reference to underlying consumer. + //! + //! Useful with \p NYsonPull::bridge + IConsumer& GetConsumer() { + return *Impl_; + } + + TWriter& BeginStream() { + Impl_->OnBeginStream(); + return *this; + } + TWriter& EndStream() { + Impl_->OnEndStream(); + return *this; + } + + TWriter& BeginList() { + Impl_->OnBeginList(); + return *this; + } + TWriter& EndList() { + Impl_->OnEndList(); + return *this; + } + + TWriter& BeginMap() { + Impl_->OnBeginMap(); + return *this; + } + TWriter& EndMap() { + Impl_->OnEndMap(); + return *this; + } + + TWriter& BeginAttributes() { + Impl_->OnBeginAttributes(); + return *this; + } + TWriter& EndAttributes() { + Impl_->OnEndAttributes(); + return *this; + } + + TWriter& Key(TStringBuf name) { + Impl_->OnKey(name); + return *this; + } + + TWriter& Entity() { + Impl_->OnEntity(); + return *this; + } + TWriter& Boolean(bool value) { + Impl_->OnScalarBoolean(value); + return *this; + } + TWriter& Int64(i64 value) { + Impl_->OnScalarInt64(value); + return *this; + } + TWriter& UInt64(ui64 value) { + Impl_->OnScalarUInt64(value); + return *this; + } + TWriter& Float64(double value) { + Impl_->OnScalarFloat64(value); + return *this; + } + TWriter& String(TStringBuf value) { + Impl_->OnScalarString(value); + return *this; + } + + TWriter& Scalar(const TScalar& value) { + Impl_->OnScalar(value); + return *this; + } + TWriter& Event(const TEvent& value) { + Impl_->OnEvent(value); + return *this; + } + }; + + //! \brief Construct a writer for binary YSON format. + TWriter MakeBinaryWriter( + THolder<NOutput::IStream> stream, + EStreamType mode); + + //! \brief Construct a writer for text YSON format. + TWriter MakeTextWriter( + THolder<NOutput::IStream> stream, + EStreamType mode); + + //! \brief Construct a writer for pretty text YSON format. + TWriter MakePrettyTextWriter( + THolder<NOutput::IStream> stream, + EStreamType mode, + size_t indent_size = 4); + +} |