BSPParser
Simple and modern library for parsing the Valve BSP format
Loading...
Searching...
No Matches
errors.hpp
1#pragma once
2
3#include "enums/lump.hpp"
4#include <cstdint>
5#include <stdexcept>
6
7#define ERROR_FOR_REASON(reason) \
8 class reason final : public Error { \
9 public: \
10 explicit reason(const Enums::Lump lump, const std::string& message) : Error(Reason::reason, lump, message) {} \
11 };
12
13namespace BspParser::Errors {
14 enum class Reason : uint8_t {
15 InvalidHeader,
16 InvalidBody,
17 InvalidChecksum,
18 UnsupportedVersion,
19 OutOfBoundsAccess,
20 };
21
22 class Error : public std::runtime_error {
23 public:
24 Error(const Reason reason, const Enums::Lump lump, const std::string& message) :
25 std::runtime_error(message), reason(reason), lump(lump) {}
26
27 [[nodiscard]] Reason getReason() const {
28 return reason;
29 }
30
31 [[nodiscard]] Enums::Lump getLump() const {
32 return lump;
33 }
34
35 private:
36 Reason reason;
37 Enums::Lump lump;
38 };
39
40 ERROR_FOR_REASON(InvalidHeader);
41 ERROR_FOR_REASON(InvalidBody);
42 ERROR_FOR_REASON(InvalidChecksum);
43 ERROR_FOR_REASON(UnsupportedVersion);
44 ERROR_FOR_REASON(OutOfBoundsAccess);
45}
46
47#undef ERROR_FOR_REASON
Definition: errors.hpp:22