diff options
author | Alexander Smirnov <alex@ydb.tech> | 2024-04-16 09:11:59 +0000 |
---|---|---|
committer | Alexander Smirnov <alex@ydb.tech> | 2024-04-16 09:11:59 +0000 |
commit | 25de1d521ca218e2b040739fea77a39e9fc543e9 (patch) | |
tree | 21521d8866cf1462dbd52c071cf369974c29650e /library/cpp/yson/node/node_io.cpp | |
parent | bf444b8ed4d0f6bf17fd753e2cf88f9440012e87 (diff) | |
parent | 0a63d9ddc516f206f2b8745ce5e5dfa60190d755 (diff) | |
download | ydb-25de1d521ca218e2b040739fea77a39e9fc543e9.tar.gz |
Merge branch 'rightlib' into mergelibs-240416-0910
Diffstat (limited to 'library/cpp/yson/node/node_io.cpp')
-rw-r--r-- | library/cpp/yson/node/node_io.cpp | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/library/cpp/yson/node/node_io.cpp b/library/cpp/yson/node/node_io.cpp index 2e191d8d48..d8a05ec995 100644 --- a/library/cpp/yson/node/node_io.cpp +++ b/library/cpp/yson/node/node_io.cpp @@ -11,6 +11,7 @@ #include <library/cpp/json/json_reader.h> #include <library/cpp/json/json_value.h> +#include <util/generic/size_literals.h> #include <util/stream/input.h> #include <util/stream/output.h> #include <util/stream/str.h> @@ -82,6 +83,28 @@ static TNode CreateEmptyNodeByType(::NYson::EYsonType type) return result; } +static TNode NodeFromYsonStream(IInputStream* input, ::NYson::EYsonType type, bool consumeUntilEof) +{ + TNode result = CreateEmptyNodeByType(type); + + ui64 bufferSizeLimit = 64_KB; + if (!consumeUntilEof) { + // Other values might be in the stream, so reading one symbol at a time. + bufferSizeLimit = 1; + } + + TNodeBuilder builder(&result); + ::NYson::TYsonParser parser( + &builder, + input, + type, + /*enableLinePositionInfo*/ false, + bufferSizeLimit, + consumeUntilEof); + parser.Parse(); + return result; +} + TNode NodeFromYsonString(const TStringBuf input, ::NYson::EYsonType type) { TMemoryInput stream(input); @@ -104,12 +127,12 @@ TString NodeToCanonicalYsonString(const TNode& node, NYson::EYsonFormat format) TNode NodeFromYsonStream(IInputStream* input, ::NYson::EYsonType type) { - TNode result = CreateEmptyNodeByType(type); + return NodeFromYsonStream(input, type, /*consumeUntilEof*/ true); +} - TNodeBuilder builder(&result); - ::NYson::TYsonParser parser(&builder, input, type); - parser.Parse(); - return result; +TNode NodeFromYsonStreamNonGreedy(IInputStream* input, ::NYson::EYsonType type) +{ + return NodeFromYsonStream(input, type, /*consumeUntilEof*/ false); } void NodeToYsonStream(const TNode& node, IOutputStream* output, NYson::EYsonFormat format) |