userver: userver/formats/json/parser/base_parser.hpp Source File
Loading...
Searching...
No Matches
base_parser.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/formats/json/parser/base_parser.hpp
4/// @brief @copybrief formats::json::parser::BaseParser
5/// @ingroup userver_universal
6
7#include <userver/formats/json/parser/exception.hpp>
8#include <userver/formats/json/parser/parser_state.hpp>
9
10USERVER_NAMESPACE_BEGIN
11
12namespace formats::json::parser {
13
14/// @brief Base class for SAX parser.
15///
17public:
18 virtual ~BaseParser();
19
20 BaseParser() = default;
21 BaseParser(BaseParser&&) = delete;
22 BaseParser(const BaseParser&) = delete;
23 BaseParser& operator=(const BaseParser&) = delete;
24 BaseParser& operator=(BaseParser&&) = delete;
25
26 virtual void Null();
27 virtual void Bool(bool);
28 virtual void Int64(int64_t);
29 virtual void Uint64(uint64_t);
30 virtual void Double(double);
31 virtual void String(std::string_view);
32 virtual void StartObject();
33 virtual void Key(std::string_view key);
34 virtual void EndObject();
35 virtual void StartArray();
36 virtual void EndArray();
37
38 // Low-level variants of EndObject/EndArray
39 virtual void EndObject(size_t /* members */) { EndObject(); }
40 virtual void EndArray(size_t /* members */) { EndArray(); }
41
42 void SetState(ParserState& state) { parser_state_ = &state; }
43
44 virtual std::string GetPathItem() const = 0;
45
46 std::string GetCurrentPath() const { return parser_state_->GetCurrentPath(); }
47
48protected:
49 [[noreturn]] void Throw(const std::string& found);
50
51 virtual std::string Expected() const = 0;
52
53 // NOLINTNEXTLINE(misc-non-private-member-variables-in-classes)
54 ParserState* parser_state_{nullptr};
55};
56
57} // namespace formats::json::parser
58
59USERVER_NAMESPACE_END