userver: userver/formats/json/impl/mutable_value_wrapper.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
mutable_value_wrapper.hpp
1#pragma once
2
3#include <memory>
4#include <string>
5
6#include <userver/formats/json/impl/types.hpp>
7
8#include <userver/compiler/select.hpp>
9#include <userver/utils/fast_pimpl.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13namespace formats::json {
14class Value;
15} // namespace formats::json
16
17namespace formats::json::impl {
18
19class MutableValueWrapper {
20 public:
21 MutableValueWrapper();
22 explicit MutableValueWrapper(VersionedValuePtr root);
23 ~MutableValueWrapper();
24
25 MutableValueWrapper(const MutableValueWrapper&);
26 MutableValueWrapper(MutableValueWrapper&&) noexcept;
27 MutableValueWrapper& operator=(const MutableValueWrapper&);
28 MutableValueWrapper& operator=(MutableValueWrapper&&) noexcept;
29
30 MutableValueWrapper WrapMember(std::string&& element,
31 const Value& member) const;
32 MutableValueWrapper WrapElement(size_t index) const;
33
34 const formats::json::Value& operator*() const;
35 formats::json::Value& operator*();
36 const formats::json::Value* operator->() const;
37 formats::json::Value* operator->();
38
39 std::string GetPath() const;
40 formats::json::Value ExtractValue() &&;
41
42 void OnMembersChange();
43
44 private:
45 struct JsonPath;
46 struct Impl;
47
48 MutableValueWrapper(std::shared_ptr<JsonPath> path, VersionedValuePtr root,
49 const Value& member, int depth);
50
51 void EnsureCurrent() const;
52
53 static constexpr std::size_t kSize = compiler::SelectSize() //
54 .ForLibCpp32(52)
55 .ForLibCpp64(112)
56 .ForLibStdCpp64(112)
57 .ForLibStdCpp32(64);
58 static constexpr std::size_t kAlignment = alignof(void*);
59 utils::FastPimpl<Impl, kSize, kAlignment> impl_;
60};
61
62} // namespace formats::json::impl
63
64USERVER_NAMESPACE_END