StormByte-Config 2.0.0
C++26 configuration-document module of the StormByte suite
 
Loading...
Searching...
No Matches
exception.hxx
Go to the documentation of this file.
1/*
2 * Copyright (C) 2024-2026 David C. Manuelda (StormBytePP)
3 *
4 * This file is part of StormByte-Config.
5 *
6 * StormByte-Config original source is dual-licensed:
7 *
8 * 1. GNU Lesser General Public License v3.0 (or later)
9 * You may redistribute and/or modify this file under the terms of the
10 * GNU Lesser General Public License as published by the Free Software
11 * Foundation, either version 3 of the License, or (at your option)
12 * any later version.
13 *
14 * 2. Commercial license
15 * Alternatively, this file may be used under the terms of a commercial
16 * license agreement with the copyright holder
17 * (David C. Manuelda <StormByte@gmail.com>).
18 *
19 * Both licenses apply only to original StormByte-Config source in this
20 * repository. They do not cover other StormByte modules or any third-party
21 * material shipped with this repository (including everything under
22 * thirdparty/, and in particular the bundled StormByte-String tree and
23 * the StormByte Base tree it vendors), which remains under its own license.
24 *
25 * Neither license grants any patent rights. Any patent licenses required
26 * to use this software or third-party components must be obtained separately
27 * from the patent holders.
28 *
29 * StormByte-Config is distributed in the hope that it will be useful,
30 * but WITHOUT ANY WARRANTY; without even the implied warranty of
31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32 * GNU Lesser General Public License for more details.
33 *
34 * You should have received a copy of the GNU Lesser General Public License
35 * version 3 along with StormByte-Config. If not, see
36 * <https://www.gnu.org/licenses/lgpl-3.0.html>.
37 *
38 * SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-StormByte-Commercial
39 */
40
41#pragma once
42
45
46#include <string>
47#include <string_view>
48#include <utility>
49
53namespace StormByte::Config {
59 public:
66 template <typename... Args>
67 explicit Exception(std::format_string<Args...> fmt, Args&&... args)
68 : StormByte::Exception(StormByte::Exception::Path{"Config"}, fmt, std::forward<Args>(args)...) {}
69
74 explicit Exception(std::string message)
75 : StormByte::Exception(StormByte::Exception::Path{"Config"}, "{}", std::move(message)) {}
76
85 Exception(std::string_view path, std::string message)
86 : StormByte::Exception(StormByte::Exception::Path{path}, "{}", std::move(message)) {}
87
92 Exception(const Exception& other) = default;
93
98 Exception(Exception&& other) noexcept = default;
99
103 ~Exception() noexcept override;
104
110 Exception& operator=(const Exception& other) = default;
111
117 Exception& operator=(Exception&& other) noexcept = default;
118 };
119
125 public:
126 using Exception::Exception;
127
131 ~WrongValueTypeConversion() noexcept override;
132 };
133
139 public:
140 using Exception::Exception;
141
145 ~ValueFailure() noexcept override;
146 };
147
153 public:
154 using Exception::Exception;
155
159 ~InvalidName() noexcept override;
160 };
161
167 public:
168 using Exception::Exception;
169
173 ~InvalidPath() noexcept override;
174 };
175
181 public:
182 using Exception::Exception;
183
187 ~ParseError() noexcept override;
188 };
189
195 public:
196 using Exception::Exception;
197
201 ~ItemNotFound() noexcept override;
202 };
203
209 public:
210 using Exception::Exception;
211
215 ~ItemAlreadyExists() noexcept override;
216 };
217
223 public:
224 using Exception::Exception;
225
229 ~ItemNameAlreadyExists() noexcept override;
230 };
231
237 public:
238 using Exception::Exception;
239
243 ~OutOfBounds() noexcept override;
244 };
245}
Root exception for Config.
Definition exception.hxx:58
Exception(std::format_string< Args... > fmt, Args &&... args)
Format under StormByte.Config.
Definition exception.hxx:67
Exception(std::string_view path, std::string message)
Plain message under an explicit path.
Definition exception.hxx:85
Exception(const Exception &other)=default
Copy constructor.
~Exception() noexcept override
Destructor.
Exception(std::string message)
Format a plain message under StormByte.Config.
Definition exception.hxx:74
Exception(Exception &&other) noexcept=default
Move constructor.
Thrown when an invalid name is used for an item.
Definition exception.hxx:152
~InvalidName() noexcept override
Destructor.
Thrown when an invalid path is used for an item.
Definition exception.hxx:166
~InvalidPath() noexcept override
Destructor.
Thrown when attempting to add an item that already exists.
Definition exception.hxx:208
~ItemAlreadyExists() noexcept override
Destructor.
Thrown when an item's name conflicts with an existing name.
Definition exception.hxx:222
~ItemNameAlreadyExists() noexcept override
Destructor.
Thrown when an item cannot be found by its path or name.
Definition exception.hxx:194
~ItemNotFound() noexcept override
Destructor.
Thrown when an index is out of bounds.
Definition exception.hxx:236
~OutOfBounds() noexcept override
Destructor.
Thrown when a parsing error occurs in a configuration file.
Definition exception.hxx:180
~ParseError() noexcept override
Destructor.
Thrown when setting a value fails due to type mismatch.
Definition exception.hxx:138
~ValueFailure() noexcept override
Destructor.
Thrown when a value is converted to an incorrect type.
Definition exception.hxx:124
~WrongValueTypeConversion() noexcept override
Destructor.
Config module of the StormByte suite.
Definition alias.hxx:50
STL namespace.
#define STORMBYTE_CONFIG_PUBLIC
Definition visibility.h:53