error_code.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #pragma once
  2. //
  3. // Copyright (c) 2019 Ivan Baidakou (basiliscos) (the dot dmol at gmail dot com)
  4. //
  5. // Distributed under the MIT Software License
  6. //
  7. #include <string>
  8. #include <system_error>
  9. namespace rotor {
  10. /** \brief fatal error codes in rotor */
  11. enum class error_code_t {
  12. success = 0,
  13. request_timeout,
  14. supervisor_defined,
  15. already_registered,
  16. unknown_service,
  17. };
  18. namespace details {
  19. /** \brief category support for `rotor` error codes */
  20. class error_code_category : public std::error_category {
  21. virtual const char *name() const noexcept override;
  22. virtual std::string message(int c) const override;
  23. };
  24. } // namespace details
  25. /** \brief returns error code category for `rotor` error codes */
  26. const details::error_code_category &error_code_category();
  27. /** \brief makes `std::error_code` from rotor error_code enumerations */
  28. inline std::error_code make_error_code(error_code_t e) { return {static_cast<int>(e), error_code_category()}; }
  29. } // namespace rotor
  30. namespace std {
  31. template <> struct is_error_code_enum<rotor::error_code_t> : std::true_type {};
  32. } // namespace std