10#include <userver/formats/yaml/types.hpp> 
   11#include <userver/utils/fast_pimpl.hpp> 
   13USERVER_NAMESPACE_BEGIN
 
   15namespace formats::
yaml {
 
   18template <
typename iter_traits>
 
   21  using iterator_category = std::forward_iterator_tag;
 
   22  using difference_type = std::ptrdiff_t;
 
   23  using value_type = 
typename iter_traits::value_type;
 
   24  using reference = 
typename iter_traits::reference;
 
   25  using pointer = 
typename iter_traits::pointer;
 
   27  Iterator(
const typename iter_traits::native_iter& iter, 
int index,
 
   29  Iterator(
const Iterator& other);
 
   30  Iterator(Iterator&& other) 
noexcept;
 
   31  Iterator& operator=(
const Iterator& other);
 
   32  Iterator& operator=(Iterator&& other) 
noexcept;
 
   35  Iterator operator++(
int);
 
   36  Iterator& operator++();
 
   37  reference operator*() 
const;
 
   38  pointer operator->() 
const;
 
   40  bool operator==(
const Iterator& other) 
const;
 
   41  bool operator!=(
const Iterator& other) 
const;
 
   54  void UpdateValue() 
const;
 
   56  static constexpr std::size_t kNativeIterSize = 48;
 
   57  static constexpr std::size_t kNativeIterAlignment = 
alignof(
void*);
 
   58  utils::FastPimpl<
typename iter_traits::native_iter, kNativeIterSize,
 
   64  mutable std::optional<value_type> current_;