6#include <userver/formats/common/type.hpp>
10template <
typename CharType>
13template <
typename Encoding,
typename Allocator>
15template <
typename Encoding,
typename Allocator,
typename StackAllocator>
19USERVER_NAMESPACE_BEGIN
21namespace formats::
json {
23using formats::
common::Type;
29using UTF8 = ::rapidjson::UTF8<
char>;
30using Value = ::rapidjson::GenericValue<UTF8, ::rapidjson::CrtAllocator>;
31using Document = ::rapidjson::GenericDocument<UTF8, ::rapidjson::CrtAllocator,
32 ::rapidjson::CrtAllocator>;
34class VersionedValuePtr
final {
36 static constexpr size_t kInvalidVersion = -1;
38 VersionedValuePtr()
noexcept;
40 template <
typename... Args>
41 static VersionedValuePtr Create(Args&&... args);
43 VersionedValuePtr(
const VersionedValuePtr&) =
default;
44 VersionedValuePtr(VersionedValuePtr&&) =
default;
45 VersionedValuePtr& operator=(
const VersionedValuePtr&) =
default;
46 VersionedValuePtr& operator=(VersionedValuePtr&&)
noexcept =
default;
50 explicit operator
bool()
const;
51 bool IsUnique()
const;
53 const impl::Value* Get()
const;
56 const impl::Value& operator*()
const;
57 impl::Value& operator*();
58 const impl::Value* operator->()
const;
59 impl::Value* operator->();
61 size_t Version()
const;
67 explicit VersionedValuePtr(std::shared_ptr<Data>&&)
noexcept;
69 std::shared_ptr<Data> data_;