5#include <userver/formats/json/parser/base_parser.hpp>
6#include <userver/utils/assert.hpp>
15 virtual ~Subscriber() =
default;
17 virtual void OnSend(T&&) = 0;
23 SubscriberSink(T& data)
27 void OnSend(T&& value)
override { data_ = std::move(value); }
36 SubscriberSinkOptional(std::optional<T>& data)
40 void OnSend(T&& value)
override { data_ = std::move(value); }
42 void OnSend(std::optional<T>&& value)
override { data_ = std::move(value); }
45 std::optional<T>& data_;
135 void Subscribe(
Subscriber<T>& subscriber) { subscriber_ = &subscriber; }
137 using ResultType = T;
151 void SetResult(T&& value) {
152 parser_state_->PopMe(*
this);
154 subscriber_->OnSend(std::move(value));
164template <
typename Parser>
165typename Parser::ResultType ParseSingle(Parser& parser, std::string_view input) {
166 using ResultType =
typename Parser::ResultType;
170 SubscriberSink<ResultType> sink(result);
171 parser.Subscribe(sink);
174 state.PushParser(parser);
175 state.ProcessInput(input);
182template <
typename T,
typename Parser>
183T ParseToType(std::string_view input) {
185 return impl::ParseSingle(parser, input);