error.ipp 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /* Copyright (c) 2018-2024 Marcelo Zimbres Silva (mzimbres@gmail.com)
  2. *
  3. * Distributed under the Boost Software License, Version 1.0. (See
  4. * accompanying file LICENSE.txt)
  5. */
  6. #include <boost/redis/error.hpp>
  7. #include <boost/assert.hpp>
  8. namespace boost::redis {
  9. namespace detail {
  10. struct error_category_impl : system::error_category {
  11. virtual ~error_category_impl() = default;
  12. auto name() const noexcept -> char const* override { return "boost.redis"; }
  13. auto message(int ev) const -> std::string override
  14. {
  15. switch (static_cast<error>(ev)) {
  16. case error::invalid_data_type: return "Invalid resp3 type.";
  17. case error::not_a_number:
  18. return "Can't convert string to number (maybe forgot to upgrade to RESP3?).";
  19. case error::exceeeds_max_nested_depth:
  20. return "Exceeds the maximum number of nested responses.";
  21. case error::unexpected_bool_value: return "Unexpected bool value.";
  22. case error::empty_field: return "Expected field value is empty.";
  23. case error::expects_resp3_simple_type: return "Expects a resp3 simple type.";
  24. case error::expects_resp3_aggregate: return "Expects resp3 aggregate.";
  25. case error::expects_resp3_map: return "Expects resp3 map.";
  26. case error::expects_resp3_set: return "Expects resp3 set.";
  27. case error::nested_aggregate_not_supported: return "Nested aggregate not_supported.";
  28. case error::resp3_simple_error: return "Got RESP3 simple-error.";
  29. case error::resp3_blob_error: return "Got RESP3 blob-error.";
  30. case error::incompatible_size: return "Aggregate container has incompatible size.";
  31. case error::not_a_double: return "Not a double.";
  32. case error::resp3_null: return "Got RESP3 null.";
  33. case error::not_connected: return "Not connected.";
  34. case error::resolve_timeout: return "Resolve timeout.";
  35. case error::connect_timeout: return "Connect timeout.";
  36. case error::pong_timeout: return "Pong timeout.";
  37. case error::ssl_handshake_timeout: return "SSL handshake timeout.";
  38. case error::sync_receive_push_failed:
  39. return "Can't receive server push synchronously without blocking.";
  40. case error::incompatible_node_depth: return "Incompatible node depth.";
  41. case error::resp3_hello:
  42. return "The server response to the setup request sent during connection establishment "
  43. "contains an error.";
  44. case error::unix_sockets_unsupported:
  45. return "The configuration specified a UNIX socket address, but UNIX sockets are not "
  46. "supported by the system.";
  47. case error::unix_sockets_ssl_unsupported:
  48. return "The configuration specified UNIX sockets with SSL, which is not supported.";
  49. case error::exceeds_maximum_read_buffer_size:
  50. return "Reading data from the socket would exceed the maximum size allowed of the read "
  51. "buffer.";
  52. case error::write_timeout:
  53. return "Timeout while writing data to the server.";
  54. default: BOOST_ASSERT(false); return "Boost.Redis error.";
  55. }
  56. }
  57. };
  58. auto category() -> system::error_category const&
  59. {
  60. static error_category_impl instance;
  61. return instance;
  62. }
  63. } // namespace detail
  64. auto make_error_code(error e) -> system::error_code
  65. {
  66. return system::error_code{static_cast<int>(e), detail::category()};
  67. }
  68. } // namespace boost::redis