1// Copyright 2012 The Kyua Authors.
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met:
7//
8// * Redistributions of source code must retain the above copyright
9//   notice, this list of conditions and the following disclaimer.
10// * Redistributions in binary form must reproduce the above copyright
11//   notice, this list of conditions and the following disclaimer in the
12//   documentation and/or other materials provided with the distribution.
13// * Neither the name of Google Inc. nor the names of its contributors
14//   may be used to endorse or promote products derived from this software
15//   without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29/// \file utils/config/exceptions.hpp
30/// Exception types raised by the config module.
31
32#if !defined(UTILS_CONFIG_EXCEPTIONS_HPP)
33#define UTILS_CONFIG_EXCEPTIONS_HPP
34
35#include <stdexcept>
36
37#include "utils/config/keys_fwd.hpp"
38#include "utils/config/tree_fwd.hpp"
39
40namespace utils {
41namespace config {
42
43
44/// Base exceptions for config errors.
45class error : public std::runtime_error {
46public:
47    explicit error(const std::string&);
48    ~error(void) throw();
49};
50
51
52/// Exception denoting that two trees cannot be combined.
53class bad_combination_error : public error {
54public:
55    explicit bad_combination_error(const detail::tree_key&,
56                                   const std::string&);
57    ~bad_combination_error(void) throw();
58};
59
60
61/// Exception denoting that a key was not found within a tree.
62class invalid_key_error : public error {
63public:
64    explicit invalid_key_error(const std::string&);
65    ~invalid_key_error(void) throw();
66};
67
68
69/// Exception denoting that a key was given an invalid value.
70class invalid_key_value : public error {
71public:
72    explicit invalid_key_value(const detail::tree_key&, const std::string&);
73    ~invalid_key_value(void) throw();
74};
75
76
77/// Exception denoting that a configuration file is invalid.
78class syntax_error : public error {
79public:
80    explicit syntax_error(const std::string&);
81    ~syntax_error(void) throw();
82};
83
84
85/// Exception denoting that a key was not found within a tree.
86class unknown_key_error : public error {
87public:
88    explicit unknown_key_error(const detail::tree_key&,
89                               const std::string& = "");
90    ~unknown_key_error(void) throw();
91};
92
93
94/// Exception denoting that a value was invalid.
95class value_error : public error {
96public:
97    explicit value_error(const std::string&);
98    ~value_error(void) throw();
99};
100
101
102}  // namespace config
103}  // namespace utils
104
105
106#endif  // !defined(UTILS_CONFIG_EXCEPTIONS_HPP)
107