error.ipp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. //
  2. // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
  3. //
  4. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. // Official repository: https://github.com/boostorg/json
  8. //
  9. #ifndef BOOST_JSON_IMPL_ERROR_IPP
  10. #define BOOST_JSON_IMPL_ERROR_IPP
  11. #include <boost/json/error.hpp>
  12. BOOST_JSON_NS_BEGIN
  13. error_code
  14. make_error_code(error e)
  15. {
  16. struct codes : error_category
  17. {
  18. const char*
  19. name() const noexcept override
  20. {
  21. return "boost.json";
  22. }
  23. std::string
  24. message(int ev) const override
  25. {
  26. switch(static_cast<error>(ev))
  27. {
  28. default:
  29. case error::syntax: return "syntax error";
  30. case error::extra_data: return "extra data";
  31. case error::incomplete: return "incomplete JSON";
  32. case error::exponent_overflow: return "exponent overflow";
  33. case error::too_deep: return "too deep";
  34. case error::illegal_leading_surrogate: return "illegal leading surrogate";
  35. case error::illegal_trailing_surrogate: return "illegal trailing surrogate";
  36. case error::expected_hex_digit: return "expected hex digit";
  37. case error::expected_utf16_escape: return "expected utf16 escape";
  38. case error::object_too_large: return "object too large";
  39. case error::array_too_large: return "array too large";
  40. case error::key_too_large: return "key too large";
  41. case error::string_too_large: return "string too large";
  42. case error::exception: return "got exception";
  43. case error::not_number: return "not a number";
  44. case error::not_exact: return "not exact";
  45. case error::test_failure: return "test failure";
  46. }
  47. }
  48. error_condition
  49. default_error_condition(
  50. int ev) const noexcept override
  51. {
  52. switch(static_cast<error>(ev))
  53. {
  54. default:
  55. return {ev, *this};
  56. case error::syntax:
  57. case error::extra_data:
  58. case error::incomplete:
  59. case error::exponent_overflow:
  60. case error::too_deep:
  61. case error::illegal_leading_surrogate:
  62. case error::illegal_trailing_surrogate:
  63. case error::expected_hex_digit:
  64. case error::expected_utf16_escape:
  65. case error::object_too_large:
  66. case error::array_too_large:
  67. case error::key_too_large:
  68. case error::string_too_large:
  69. case error::exception:
  70. return condition::parse_error;
  71. case error::not_number:
  72. case error::not_exact:
  73. return condition::assign_error;
  74. }
  75. }
  76. };
  77. static codes const cat{};
  78. return error_code{static_cast<
  79. std::underlying_type<error>::type>(e), cat};
  80. }
  81. error_condition
  82. make_error_condition(condition c)
  83. {
  84. struct codes : error_category
  85. {
  86. const char*
  87. name() const noexcept override
  88. {
  89. return "boost.json";
  90. }
  91. std::string
  92. message(int cv) const override
  93. {
  94. switch(static_cast<condition>(cv))
  95. {
  96. default:
  97. case condition::parse_error:
  98. return "A JSON parse error occurred";
  99. case condition::assign_error:
  100. return "An error occurred during assignment";
  101. }
  102. }
  103. };
  104. static codes const cat{};
  105. return error_condition{static_cast<
  106. std::underlying_type<condition>::type>(c), cat};
  107. }
  108. BOOST_JSON_NS_END
  109. #endif