2
0
mirror of https://github.com/boostorg/mysql.git synced 2026-01-19 16:32:12 +00:00
Files
Anarthal (Rubén Pérez) 793b678287 Updated file copyrights to 2025
2025-02-11 20:42:41 +01:00

67 lines
2.2 KiB
C++

//
// Copyright (c) 2019-2025 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#ifndef BOOST_MYSQL_EXAMPLE_3_ADVANCED_HTTP_SERVER_CPP20_ERROR_HPP
#define BOOST_MYSQL_EXAMPLE_3_ADVANCED_HTTP_SERVER_CPP20_ERROR_HPP
//[example_http_server_cpp20_error_hpp
//
// File: error.hpp
//
// Contains an errc enumeration and the required pieces to
// use it with boost::system::error_code.
// We use this indirectly in the DB repository class,
// when using the error codes in boost::system::result.
#include <boost/system/error_category.hpp>
#include <mutex>
#include <string_view>
#include <type_traits>
namespace orders {
// Error code enum for errors originated within our application
enum class errc
{
not_found, // couldn't retrieve or modify a certain resource because it doesn't exist
order_invalid_status, // an operation found an order in a status != the one expected (e.g. not editable)
product_not_found, // a product referenced by a request doesn't exist
};
// To use errc with boost::system::error_code, we need
// to define an error category (see the cpp file).
const boost::system::error_category& get_orders_category();
// Called when constructing an error_code from an errc value.
inline boost::system::error_code make_error_code(errc v)
{
// Roughly, an error_code is an int and a category defining what the int means.
return boost::system::error_code(static_cast<int>(v), get_orders_category());
}
// In multi-threaded programs, using std::cerr without any locking
// can result in interleaved output.
// Locks a mutex guarding std::cerr to prevent this.
// All uses of std::cerr should respect this.
std::unique_lock<std::mutex> lock_cerr();
// A helper function for the common case where we want to log an error code
void log_error(std::string_view header, boost::system::error_code ec);
} // namespace orders
// This specialization is required to construct error_code's from errc values
template <>
struct boost::system::is_error_code_enum<orders::errc> : std::true_type
{
};
//]
#endif