mirror of
https://github.com/XRPLF/rippled.git
synced 2026-01-23 08:05:26 +00:00
119 lines
3.1 KiB
C++
119 lines
3.1 KiB
C++
#include <xrpl/basics/safe_cast.h>
|
|
#include <xrpl/conditions/detail/error.h>
|
|
|
|
#include <string>
|
|
|
|
namespace xrpl {
|
|
namespace cryptoconditions {
|
|
namespace detail {
|
|
|
|
class cryptoconditions_error_category : public std::error_category
|
|
{
|
|
public:
|
|
explicit cryptoconditions_error_category() = default;
|
|
|
|
char const*
|
|
name() const noexcept override
|
|
{
|
|
return "cryptoconditions";
|
|
}
|
|
|
|
std::string
|
|
message(int ev) const override
|
|
{
|
|
switch (safe_cast<error>(ev))
|
|
{
|
|
case error::unsupported_type:
|
|
return "Specification: Requested type not supported.";
|
|
|
|
case error::unsupported_subtype:
|
|
return "Specification: Requested subtype not supported.";
|
|
|
|
case error::unknown_type:
|
|
return "Specification: Requested type not recognized.";
|
|
|
|
case error::unknown_subtype:
|
|
return "Specification: Requested subtypes not recognized.";
|
|
|
|
case error::fingerprint_size:
|
|
return "Specification: Incorrect fingerprint size.";
|
|
|
|
case error::incorrect_encoding:
|
|
return "Specification: Incorrect encoding.";
|
|
|
|
case error::trailing_garbage:
|
|
return "Bad buffer: contains trailing garbage.";
|
|
|
|
case error::buffer_empty:
|
|
return "Bad buffer: no data.";
|
|
|
|
case error::buffer_overfull:
|
|
return "Bad buffer: overfull.";
|
|
|
|
case error::buffer_underfull:
|
|
return "Bad buffer: underfull.";
|
|
|
|
case error::malformed_encoding:
|
|
return "Malformed DER encoding.";
|
|
|
|
case error::unexpected_tag:
|
|
return "Malformed DER encoding: Unexpected tag.";
|
|
|
|
case error::short_preamble:
|
|
return "Malformed DER encoding: Short preamble.";
|
|
|
|
case error::long_tag:
|
|
return "Implementation limit: Overlong tag.";
|
|
|
|
case error::large_size:
|
|
return "Implementation limit: Large payload.";
|
|
|
|
case error::preimage_too_long:
|
|
return "Implementation limit: Specified preimage is too long.";
|
|
|
|
case error::generic:
|
|
default:
|
|
return "generic error";
|
|
}
|
|
}
|
|
|
|
std::error_condition
|
|
default_error_condition(int ev) const noexcept override
|
|
{
|
|
return std::error_condition{ev, *this};
|
|
}
|
|
|
|
bool
|
|
equivalent(int ev, std::error_condition const& condition)
|
|
const noexcept override
|
|
{
|
|
return &condition.category() == this && condition.value() == ev;
|
|
}
|
|
|
|
bool
|
|
equivalent(std::error_code const& error, int ev) const noexcept override
|
|
{
|
|
return &error.category() == this && error.value() == ev;
|
|
}
|
|
};
|
|
|
|
inline std::error_category const&
|
|
get_cryptoconditions_error_category()
|
|
{
|
|
static cryptoconditions_error_category const cat{};
|
|
return cat;
|
|
}
|
|
|
|
} // namespace detail
|
|
|
|
std::error_code
|
|
make_error_code(error ev)
|
|
{
|
|
return std::error_code{
|
|
safe_cast<std::underlying_type<error>::type>(ev),
|
|
detail::get_cryptoconditions_error_category()};
|
|
}
|
|
|
|
} // namespace cryptoconditions
|
|
} // namespace xrpl
|