10#include <userver/formats/common/iterator_direction.hpp>
12USERVER_NAMESPACE_BEGIN
14namespace formats::
json {
21 using iterator_category = std::forward_iterator_tag;
22 using difference_type = std::ptrdiff_t;
23 using value_type =
typename Traits::ValueType;
24 using reference =
typename Traits::Reference;
25 using pointer =
typename Traits::Pointer;
27 using ContainerType =
typename Traits::ContainerType;
29 Iterator(ContainerType container,
int pos);
31 Iterator(
const Iterator& other);
32 Iterator(Iterator&& other)
noexcept;
33 Iterator& operator=(
const Iterator& other);
34 Iterator& operator=(Iterator&& other)
noexcept;
38 Iterator operator++(
int);
39 Iterator& operator++();
40 reference operator*()
const;
41 pointer operator->()
const;
43 bool operator==(
const Iterator& other)
const;
44 bool operator!=(
const Iterator& other)
const;
48 template <
typename T =
void>
51 "Reverse iterator should be used only on arrays or null, "
52 "they do not have GetName()");
61 std::string GetNameImpl()
const;
62 Iterator(ContainerType&& container,
int type,
int pos)
noexcept;
64 void UpdateValue()
const;
67 ContainerType container_;
73 mutable std::optional<value_type> current_;