userver: userver/formats/json/parser/parser_raw_json.hpp Source File
Loading...
Searching...
No Matches
parser_raw_json.hpp
1#pragma once
2
3/// @file userver/formats/json/parser/raw_string_parser.hpp
4/// @brief @copybrief formats::json::parser::RawStringParser
5/// @ingroup userver_universal
6
7#include <cstdint>
8#include <string>
9#include <string_view>
10
11#include <userver/formats/json/parser/typed_parser.hpp>
12#include <userver/formats/json/raw_string.hpp>
13#include <userver/utils/fast_pimpl.hpp>
14
15USERVER_NAMESPACE_BEGIN
16
17namespace formats::json::parser {
18
19/// @brief SAX parser for arbitrary JSON values stored as RawString.
20class JsonRawStringParser final : public TypedParser<RawString> {
21public:
22 JsonRawStringParser();
23 ~JsonRawStringParser() override;
24
25 JsonRawStringParser(const JsonRawStringParser&) = delete;
26 JsonRawStringParser(JsonRawStringParser&&) = delete;
27
28 void Reset() override;
29
30protected:
31 void Null() override;
32 void Bool(bool value) override;
33 void Int64(std::int64_t value) override;
34 void Uint64(std::uint64_t value) override;
35 void Double(double value) override;
36 void String(std::string_view value) override;
37 void StartObject() override;
38 void Key(std::string_view key) override;
39 void EndObject() override;
40 void StartArray() override;
41 void EndArray() override;
42
43 std::string GetPathItem() const override { return {}; }
44
45 std::string Expected() const override;
46
47private:
48 void MaybeSetResult();
49
50 struct Impl;
51 utils::FastPimpl<Impl, 120, 8> impl_;
52};
53
54} // namespace formats::json::parser
55
56USERVER_NAMESPACE_END