aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/scheme/scheme.h
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-04-20 13:49:33 +0300
committerarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-04-20 13:49:33 +0300
commitd85809f7b86d53a83de4744b395e61df085e727f (patch)
tree32093c9bdbaa6c4ab42f34f38cfb6f401ec46d4d /library/cpp/scheme/scheme.h
parentf8b13db877cf0234f2bdf7092164f57eebc52aa1 (diff)
downloadydb-d85809f7b86d53a83de4744b395e61df085e727f.tar.gz
intermediate changes
ref:95923961b070d9d9b37fcb1d21bffeae90f3d022
Diffstat (limited to 'library/cpp/scheme/scheme.h')
-rw-r--r--library/cpp/scheme/scheme.h26
1 files changed, 18 insertions, 8 deletions
diff --git a/library/cpp/scheme/scheme.h b/library/cpp/scheme/scheme.h
index cc0699c67ac..b4cb98c9677 100644
--- a/library/cpp/scheme/scheme.h
+++ b/library/cpp/scheme/scheme.h
@@ -4,6 +4,8 @@
#include "fwd.h"
+#include <util/generic/maybe.h>
+
#include <iterator>
#include <utility>
@@ -12,6 +14,14 @@ namespace NSc {
#pragma warning(disable : 4521 4522)
#endif
+ struct TMergeOptions {
+ enum class EArrayMergeMode {
+ Replace,
+ Merge
+ };
+ EArrayMergeMode ArrayMergeMode = EArrayMergeMode::Replace;
+ };
+
// todo: try to remove some rarely used methods
class TValue {
public:
@@ -341,14 +351,14 @@ namespace NSc {
* - Do nothing.
*/
- TValue& MergeUpdateJson(TStringBuf json); // returns self
- TValue& ReverseMergeJson(TStringBuf json); // returns self
+ TValue& MergeUpdateJson(TStringBuf json, TMaybe<TMergeOptions> mergeOptions = {}); // returns self
+ TValue& ReverseMergeJson(TStringBuf json, TMaybe<TMergeOptions> mergeOptions = {}); // returns self
- static bool MergeUpdateJson(TValue&, TStringBuf json); // returns true unless failed to parse the json
- static bool ReverseMergeJson(TValue&, TStringBuf json); // returns true unless failed to parse the json
+ static bool MergeUpdateJson(TValue&, TStringBuf json, TMaybe<TMergeOptions> mergeOptions = {}); // returns true unless failed to parse the json
+ static bool ReverseMergeJson(TValue&, TStringBuf json, TMaybe<TMergeOptions> mergeOptions = {}); // returns true unless failed to parse the json
- TValue& MergeUpdate(const TValue& delta); // return self
- TValue& ReverseMerge(const TValue& delta); // return self
+ TValue& MergeUpdate(const TValue& delta, TMaybe<TMergeOptions> mergeOptions = {}); // return self
+ TValue& ReverseMerge(const TValue& delta, TMaybe<TMergeOptions> mergeOptions = {}); // return self
public: // Path methods /////////////////////////////////////////////////////////
// TODO: add throwing variants
@@ -405,8 +415,8 @@ namespace NSc {
bool IsSameOrAncestorOf(const TValue& other) const;
private:
- TValue& DoMerge(const TValue& delta, bool olddelta);
- TValue& DoMergeImpl(const TValue& delta, bool olddelta, NImpl::TSelfLoopContext&, NImpl::TSelfOverrideContext&);
+ TValue& DoMerge(const TValue& delta, bool olddelta, TMaybe<TMergeOptions> mergeOptions);
+ TValue& DoMergeImpl(const TValue& delta, bool olddelta, TMaybe<TMergeOptions> mergeOptions, NImpl::TSelfLoopContext&, NImpl::TSelfOverrideContext&);
TValue& DoCopyFromImpl(const TValue& other, NImpl::TSelfLoopContext&, NImpl::TSelfOverrideContext&);
NJson::TJsonValue ToJsonValueImpl(NImpl::TSelfLoopContext&) const;