#pragma once #include "node.h" #include #include #include namespace NYT { //////////////////////////////////////////////////////////////////////////////// class TNodeBuilder : public ::NYson::TYsonConsumerBase { public: TNodeBuilder(TNode* node); void OnStringScalar(TStringBuf) override; void OnInt64Scalar(i64) override; void OnUint64Scalar(ui64) override; void OnDoubleScalar(double) override; void OnBooleanScalar(bool) override; void OnEntity() override; void OnBeginList() override; void OnBeginList(ui64 reserveSize); void OnListItem() override; void OnEndList() override; void OnBeginMap() override; void OnBeginMap(ui64 reserveSize); void OnKeyedItem(TStringBuf) override; void OnEndMap() override; void OnBeginAttributes() override; void OnEndAttributes() override; void OnNode(TNode node); private: TStack Stack_; private: template inline void AddNode(T value, bool pop) { Stack_.top()->MoveWithoutAttributes(std::move(value)); if (pop) Stack_.pop(); } }; //////////////////////////////////////////////////////////////////////////////// } // namespace NYT