/* * Copyright 2021 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _ERRORS_EXT_H #define _ERRORS_EXT_H #include #include #include class BDataIO; namespace BPrivate { namespace Network { class BError { public: BError(const char* origin); BError(BString origin); virtual ~BError() noexcept; BError(const BError& error); BError(BError&& error) noexcept; BError& operator=(const BError& error); BError& operator=(BError&& error) noexcept; virtual const char* Message() const noexcept = 0; virtual const char* Origin() const noexcept; virtual BString DebugMessage() const; void WriteToStream(std::ostream& stream) const; size_t WriteToOutput(BDataIO* output) const; private: virtual void _ReservedError1(); virtual void _ReservedError2(); virtual void _ReservedError3(); virtual void _ReservedError4(); private: BString fOrigin; }; class BRuntimeError : public BError { public: BRuntimeError(const char* origin, const char* message); BRuntimeError(const char* origin, BString message); BRuntimeError(BString origin, BString message); BRuntimeError(const BRuntimeError& other); BRuntimeError(BRuntimeError&& other) noexcept; BRuntimeError& operator=(const BRuntimeError& other); BRuntimeError& operator=(BRuntimeError&& other) noexcept; virtual const char* Message() const noexcept override; private: BString fMessage; }; class BSystemError : public BError { public: BSystemError(const char* origin, status_t error); BSystemError(BString origin, status_t error); BSystemError(const BSystemError& other); BSystemError& operator=(const BSystemError& other); BSystemError(BSystemError&& other) noexcept; BSystemError& operator=(BSystemError&& other) noexcept; virtual const char* Message() const noexcept override; virtual BString DebugMessage() const override; status_t Error() noexcept; private: status_t fErrorCode; }; } // namespace Network } // Namespace BPrivate #endif // _ERRORS_EXT_H