userver: userver/formats/yaml/exception.hpp Source File
Loading...
Searching...
No Matches
exception.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/formats/yaml/exception.hpp
4/// @brief Exception classes for YAML module
5/// @ingroup userver_universal
6
7#include <iosfwd>
8#include <stdexcept>
9#include <string>
10
11#include <userver/formats/yaml/types.hpp>
12
13USERVER_NAMESPACE_BEGIN
14
15namespace formats::yaml {
16
17class Exception : public std::exception {
18 public:
19 explicit Exception(std::string msg) : msg_(std::move(msg)) {}
20
21 const char* what() const noexcept final { return msg_.c_str(); }
22
23 std::string_view GetMessage() const noexcept { return msg_; }
24
25 private:
26 std::string msg_;
27};
28
29class ParseException : public Exception {
30 public:
31 using Exception::Exception;
32};
33
35 public:
36 explicit ExceptionWithPath(std::string_view msg, std::string_view path);
37
38 std::string_view GetPath() const noexcept;
39 std::string_view GetMessageWithoutPath() const noexcept;
40
41 private:
42 std::size_t path_size_;
43};
44
46 public:
47 explicit BadStreamException(const std::istream& is);
48 explicit BadStreamException(const std::ostream& os);
49};
50
52 public:
53 TypeMismatchException(Type actual, Type expected, std::string_view path);
54 TypeMismatchException(int actual, int expected, std::string_view path);
55 TypeMismatchException(const YAML::Node& value, std::string_view expected_type,
56 std::string_view path);
57};
58
60 public:
61 OutOfBoundsException(size_t index, size_t size, std::string_view path);
62};
63
65 public:
66 explicit MemberMissingException(std::string_view path);
67};
68
70 public:
71 explicit PathPrefixException(std::string_view old_path,
72 std::string_view prefix);
73};
74
75} // namespace formats::yaml
76
77USERVER_NAMESPACE_END