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 {
18public:
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
25private:
26 std::string msg_;
27};
28
29class ParseException : public Exception {
30public:
31 using Exception::Exception;
32};
33
35public:
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
41private:
42 std::size_t path_size_;
43};
44
46public:
47 explicit BadStreamException(const std::istream& is);
48 explicit BadStreamException(const std::ostream& os);
49};
50
52public:
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, std::string_view path);
56};
57
59public:
60 OutOfBoundsException(size_t index, size_t size, std::string_view path);
61};
62
64public:
65 explicit MemberMissingException(std::string_view path);
66};
67
69public:
70 explicit PathPrefixException(std::string_view old_path, std::string_view prefix);
71};
72
73} // namespace formats::yaml
74
75USERVER_NAMESPACE_END