1/* 2 * Copyright 2021 Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _ERRORS_EXT_H 6#define _ERRORS_EXT_H 7 8#include <iosfwd> 9 10#include <String.h> 11#include <SupportDefs.h> 12 13class BDataIO; 14 15 16namespace BPrivate { 17 18namespace Network { 19 20 21class BError 22{ 23public: 24 BError(const char* origin); 25 BError(BString origin); 26 virtual ~BError() noexcept; 27 28 BError(const BError& error); 29 BError(BError&& error) noexcept; 30 31 BError& operator=(const BError& error); 32 BError& operator=(BError&& error) noexcept; 33 34 virtual const char* Message() const noexcept = 0; 35 virtual const char* Origin() const noexcept; 36 virtual BString DebugMessage() const; 37 void WriteToStream(std::ostream& stream) const; 38 size_t WriteToOutput(BDataIO* output) const; 39 40private: 41 virtual void _ReservedError1(); 42 virtual void _ReservedError2(); 43 virtual void _ReservedError3(); 44 virtual void _ReservedError4(); 45 46private: 47 BString fOrigin; 48}; 49 50 51class BRuntimeError : public BError 52{ 53public: 54 BRuntimeError(const char* origin, const char* message); 55 BRuntimeError(const char* origin, BString message); 56 BRuntimeError(BString origin, BString message); 57 58 BRuntimeError(const BRuntimeError& other); 59 BRuntimeError(BRuntimeError&& other) noexcept; 60 61 BRuntimeError& operator=(const BRuntimeError& other); 62 BRuntimeError& operator=(BRuntimeError&& other) noexcept; 63 64 virtual const char* Message() const noexcept override; 65 66private: 67 BString fMessage; 68}; 69 70 71class BSystemError : public BError 72{ 73public: 74 BSystemError(const char* origin, status_t error); 75 BSystemError(BString origin, status_t error); 76 77 BSystemError(const BSystemError& other); 78 BSystemError& operator=(const BSystemError& other); 79 80 BSystemError(BSystemError&& other) noexcept; 81 BSystemError& operator=(BSystemError&& other) noexcept; 82 83 virtual const char* Message() const noexcept override; 84 virtual BString DebugMessage() const override; 85 status_t Error() noexcept; 86 87private: 88 status_t fErrorCode; 89}; 90 91} // namespace Network 92 93} // Namespace BPrivate 94 95#endif // _ERRORS_EXT_H 96