mirror of
https://github.com/boostorg/uuid.git
synced 2026-01-19 04:42:16 +00:00
Add boost::uuid::invalid_uuid exception class
This commit is contained in:
@@ -1,41 +1,21 @@
|
||||
#ifndef BOOST_UUID_DETAIL_THROW_INVALID_UUID_INCLUDED
|
||||
#define BOOST_UUID_DETAIL_THROW_INVALID_UUID_INCLUDED
|
||||
|
||||
// Copyright 2025 Peter Dimov
|
||||
// Copyright 2025, 2026 Peter Dimov
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// https://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
#include <boost/uuid/detail/from_chars_result.hpp>
|
||||
#include <boost/uuid/invalid_uuid.hpp>
|
||||
#include <boost/throw_exception.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <stdexcept>
|
||||
#include <cstdio>
|
||||
#include <cstddef>
|
||||
#include <boost/assert/source_location.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace uuids {
|
||||
namespace detail {
|
||||
|
||||
BOOST_CXX14_CONSTEXPR inline char const* fc_error_to_string( from_chars_error err ) noexcept
|
||||
BOOST_NORETURN inline void throw_invalid_uuid( std::ptrdiff_t pos, from_chars_error err, boost::source_location const& loc = BOOST_CURRENT_LOCATION )
|
||||
{
|
||||
switch( err )
|
||||
{
|
||||
case from_chars_error::none: return "no error";
|
||||
case from_chars_error::unexpected_end_of_input: return "unexpected end of input";
|
||||
case from_chars_error::hex_digit_expected: return "hex digit expected";
|
||||
case from_chars_error::dash_expected: return "dash expected";
|
||||
case from_chars_error::closing_brace_expected: return "closing brace expected";
|
||||
case from_chars_error::unexpected_extra_input: return "unexpected extra input";
|
||||
default: return "unknown error";
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_NORETURN inline void throw_invalid_uuid( std::ptrdiff_t pos, from_chars_error err )
|
||||
{
|
||||
char buffer[ 128 ];
|
||||
std::snprintf( buffer, sizeof( buffer ), "Invalid UUID string at position %td: %s", pos, fc_error_to_string( err ) );
|
||||
|
||||
BOOST_THROW_EXCEPTION( std::runtime_error( buffer ) );
|
||||
boost::throw_exception( invalid_uuid( pos, err ), loc );
|
||||
}
|
||||
|
||||
}}} // namespace boost::uuids::detail
|
||||
|
||||
72
include/boost/uuid/invalid_uuid.hpp
Normal file
72
include/boost/uuid/invalid_uuid.hpp
Normal file
@@ -0,0 +1,72 @@
|
||||
#ifndef BOOST_UUID_INVALID_UUID_HPP_INCLUDED
|
||||
#define BOOST_UUID_INVALID_UUID_HPP_INCLUDED
|
||||
|
||||
// Copyright 2026 Peter Dimov
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// https://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
#include <boost/uuid/detail/from_chars_result.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <stdexcept>
|
||||
#include <cstdio>
|
||||
#include <cstddef>
|
||||
|
||||
namespace boost {
|
||||
namespace uuids {
|
||||
|
||||
namespace detail
|
||||
{
|
||||
|
||||
BOOST_CXX14_CONSTEXPR inline char const* fc_error_to_string( from_chars_error err ) noexcept
|
||||
{
|
||||
switch( err )
|
||||
{
|
||||
case from_chars_error::none: return "no error";
|
||||
case from_chars_error::unexpected_end_of_input: return "unexpected end of input";
|
||||
case from_chars_error::hex_digit_expected: return "hex digit expected";
|
||||
case from_chars_error::dash_expected: return "dash expected";
|
||||
case from_chars_error::closing_brace_expected: return "closing brace expected";
|
||||
case from_chars_error::unexpected_extra_input: return "unexpected extra input";
|
||||
default: return "unknown error";
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace detail
|
||||
|
||||
class BOOST_SYMBOL_VISIBLE invalid_uuid: public std::runtime_error
|
||||
{
|
||||
private:
|
||||
|
||||
std::ptrdiff_t pos_;
|
||||
from_chars_error err_;
|
||||
|
||||
private:
|
||||
|
||||
static std::runtime_error create_base( std::ptrdiff_t pos, from_chars_error err )
|
||||
{
|
||||
char buffer[ 128 ];
|
||||
std::snprintf( buffer, sizeof( buffer ), "Invalid UUID string at position %td: %s", pos, detail::fc_error_to_string( err ) );
|
||||
|
||||
return std::runtime_error( buffer );
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
invalid_uuid( std::ptrdiff_t pos, from_chars_error err ): std::runtime_error( create_base( pos, err ) ), pos_( pos ), err_( err )
|
||||
{
|
||||
}
|
||||
|
||||
std::ptrdiff_t position() const noexcept
|
||||
{
|
||||
return pos_;
|
||||
}
|
||||
|
||||
from_chars_error error() const noexcept
|
||||
{
|
||||
return err_;
|
||||
}
|
||||
};
|
||||
|
||||
}} // namespace boost::uuids
|
||||
|
||||
#endif // BOOST_UUID_INVALID_UUID_HPP_INCLUDED
|
||||
Reference in New Issue
Block a user