6#include <userver/formats/json/impl/types.hpp>
8#include <userver/compiler/select.hpp>
9#include <userver/utils/fast_pimpl.hpp>
11USERVER_NAMESPACE_BEGIN
13namespace formats::
json {
17namespace formats::
json::impl {
19class MutableValueWrapper {
21 MutableValueWrapper();
22 explicit MutableValueWrapper(VersionedValuePtr root);
23 ~MutableValueWrapper();
25 MutableValueWrapper(
const MutableValueWrapper&);
26 MutableValueWrapper(MutableValueWrapper&&)
noexcept;
27 MutableValueWrapper& operator=(
const MutableValueWrapper&);
28 MutableValueWrapper& operator=(MutableValueWrapper&&)
noexcept;
30 MutableValueWrapper WrapMember(std::string&& element,
31 const Value& member)
const;
32 MutableValueWrapper WrapElement(size_t index)
const;
34 const formats::
json::Value& operator*()
const;
35 formats::
json::Value& operator*();
36 const formats::
json::Value* operator->()
const;
37 formats::
json::Value* operator->();
39 std::string GetPath()
const;
40 formats::
json::Value ExtractValue() &&;
42 void OnMembersChange();
48 MutableValueWrapper(std::shared_ptr<JsonPath> path, VersionedValuePtr root,
49 const Value& member,
int depth);
51 void EnsureCurrent()
const;
53 static constexpr std::size_t kSize = compiler::SelectSize()
58 static constexpr std::size_t kAlignment =
alignof(
void*);
59 utils::FastPimpl<Impl, kSize, kAlignment> impl_;