| // Copyright (c) Benjamin Kietzman (github.com/bkietz) |
| // |
| // 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 DBUS_ERROR_HPP |
| #define DBUS_ERROR_HPP |
| |
| #include <dbus/dbus.h> |
| #include <dbus/element.hpp> |
| #include <dbus/message.hpp> |
| #include <boost/system/error_code.hpp> |
| #include <boost/system/system_error.hpp> |
| |
| namespace dbus { |
| |
| class error : public boost::system::error_category { |
| DBusError error_; |
| |
| public: |
| error() { dbus_error_init(&error_); } |
| |
| error(DBusError *src) { |
| dbus_error_init(&error_); |
| dbus_move_error(src, &error_); |
| } |
| |
| error(dbus::message &m) { |
| dbus_error_init(&error_); |
| dbus_set_error_from_message(&error_, m); |
| } |
| |
| ~error() { dbus_error_free(&error_); } |
| |
| const char *name() const BOOST_SYSTEM_NOEXCEPT { return error_.name; } |
| |
| string message(int value) const { return error_.message; } |
| |
| bool is_set() const { return dbus_error_is_set(&error_); } |
| |
| operator const DBusError *() const { return &error_; } |
| |
| operator DBusError *() { return &error_; } |
| |
| boost::system::error_code error_code() const; |
| boost::system::system_error system_error() const; |
| void throw_if_set() const; |
| }; |
| |
| inline boost::system::error_code error::error_code() const { |
| return boost::system::error_code(is_set(), *this); |
| } |
| |
| inline boost::system::system_error error::system_error() const { |
| return boost::system::system_error(error_code()); |
| } |
| |
| inline void error::throw_if_set() const { |
| if (is_set()) throw system_error(); |
| } |
| |
| } // namespace dbus |
| |
| #endif // DBUS_ERROR_HPP |