| #pragma once | |
| #include <sdbusplus/exception.hpp> | |
| #include <xyz/openbmc_project/Common/error.hpp> | |
| #include <iostream> | |
| #include <memory> | |
| #include <system_error> | |
| class NVMeSdBusPlusError : public sdbusplus::exception_t | |
| { | |
| public: | |
| // In general makeLibNVMeError() should be used rather than raw | |
| // constructors. | |
| explicit NVMeSdBusPlusError(std::string_view desc); | |
| explicit NVMeSdBusPlusError( | |
| std::shared_ptr<sdbusplus::exception_t> specific); | |
| explicit NVMeSdBusPlusError( | |
| std::string_view desc, | |
| std::shared_ptr<sdbusplus::exception_t> specific); | |
| const char* what() const noexcept override; | |
| const char* name() const noexcept override; | |
| const char* description() const noexcept override; | |
| int get_errno() const noexcept override; | |
| void print(std::ostream& o) const; | |
| private: | |
| void init(); | |
| const std::string desc; | |
| std::shared_ptr<sdbusplus::exception_t> specific; | |
| std::string whatMsg; | |
| }; | |
| using nvme_ex_ptr = std::shared_ptr<NVMeSdBusPlusError>; | |
| /* Translates an error from libnvme */ | |
| nvme_ex_ptr makeLibNVMeError(const std::error_code& err, int nvmeStatus, | |
| const char* methodName); | |
| nvme_ex_ptr makeLibNVMeError(int nvmeErrno, int nvmeStatus, | |
| const char* methodName); | |
| /* Creates an internal error */ | |
| nvme_ex_ptr makeLibNVMeError(std::string_view msg); | |
| /* Creates an error based on a known exception type */ | |
| nvme_ex_ptr | |
| makeLibNVMeError(std::string_view desc, | |
| const std::shared_ptr<sdbusplus::exception_t>& specific); | |
| /* Throws an appropriate error type for the given status from libnvme, | |
| * or returns normally if nvme_status == 0 */ | |
| void checkLibNVMeError(const std::error_code& err, int nvmeStatus, | |
| const char* methodName); | |
| std::ostream& operator<<(std::ostream& o, const nvme_ex_ptr& ex); |