Program Listing for File felix_client_exception.hpp
↰ Return to documentation for file (felix_client_exception.hpp)
#pragma once
#include <cstdint>
#include <format>
#include <stdexcept>
#include <system_error>
#include <vector>
namespace felix {
class FelixClientException: public std::runtime_error {
public:
explicit FelixClientException(std::string const& message) : std::runtime_error(message) {
}
};
class MessageTooBigException: public FelixClientException {
public:
MessageTooBigException() : FelixClientException("Message too big for buffer") {
}
};
class SendBeforeOpenException: public FelixClientException {
public:
SendBeforeOpenException() : FelixClientException("No send connection established. Call init_send_data first") {
}
};
class ResourceNotAvailableException: public FelixClientException {
public:
ResourceNotAvailableException() : FelixClientException("Resource currently not available, try again") {
}
};
class PartiallyCompletedException: public FelixClientException {
public:
PartiallyCompletedException() : FelixClientException("Operation completed partially, try again") {
}
};
class SendConnectionException: public FelixClientException {
public:
SendConnectionException() : FelixClientException("Could not establish send connection, try again") {
}
};
class SendConnectionRefusedException: public FelixClientException {
public:
SendConnectionRefusedException() : FelixClientException("Send connection was refused") {
}
};
class SendConnectionTimeoutException: public FelixClientException {
public:
SendConnectionTimeoutException() : FelixClientException("Send connection timed out") {
}
};
class SubscribeException: public FelixClientException {
public:
SubscribeException() : FelixClientException("Could not subscribe, try again") {
}
};
class AlreadySubscribedException: public FelixClientException {
public:
AlreadySubscribedException() : FelixClientException("You are already subscribed to the provided FID(s)") {
}
};
class FailedSubscribeException: public FelixClientException {
public:
FailedSubscribeException(
std::vector<std::uint64_t> fids_success,
std::vector<std::uint64_t> fids_bad,
std::vector<std::uint64_t> fids_failed,
std::vector<std::uint64_t> fids_timeout)
: FelixClientException("Could not subscribe"),
m_fids_success{std::move(fids_success)},
m_fids_bad{std::move(fids_bad)},
m_fids_failed{std::move(fids_failed)},
m_fids_timeout{std::move(fids_timeout)} {}
const std::vector<std::uint64_t>& get_fids_success() const { return m_fids_success; }
const std::vector<std::uint64_t>& get_fids_bad() const { return m_fids_bad; }
const std::vector<std::uint64_t>& get_fids_failed() const { return m_fids_failed; }
const std::vector<std::uint64_t>& get_fids_timeout() const { return m_fids_timeout; }
private:
std::vector<std::uint64_t> m_fids_success;
std::vector<std::uint64_t> m_fids_bad;
std::vector<std::uint64_t> m_fids_failed;
std::vector<std::uint64_t> m_fids_timeout;
};
class FailedAsyncSubscribeException: public FelixClientException {
public:
explicit FailedAsyncSubscribeException(std::vector<std::uint64_t> fids_bad)
: FelixClientException("Could not subscribe"),
m_fids_bad{std::move(fids_bad)} {}
const std::vector<std::uint64_t>& get_fids_bad() const { return m_fids_bad; }
private:
std::vector<std::uint64_t> m_fids_bad;
};
class NotSubscribedException: public FelixClientException {
public:
NotSubscribedException() : FelixClientException("You are not subscribed to the provided FID") {
}
};
class FailedUnsubscribeException: public FelixClientException {
public:
FailedUnsubscribeException() : FelixClientException("Failed to unsubscribe") {
}
};
class UnsubscribeTimeoutException: public FelixClientException {
public:
UnsubscribeTimeoutException() : FelixClientException("Unsubscription timed out") {
}
};
class BusException: public FelixClientException {
public:
BusException(const std::uint64_t fid, const std::exception& ex) :
FelixClientException(std::format("Bus error for FID {:#x}: {}", fid, ex.what())),
m_fid{fid},
m_underlying_message{ex.what()}
{}
[[nodiscard]] std::uint64_t get_fid() const { return m_fid; }
[[nodiscard]] std::string get_underlying_message() const { return m_underlying_message; }
private:
std::uint64_t m_fid{};
std::string m_underlying_message{};
};
class FelixIoException: public FelixClientException {
public:
explicit FelixIoException(const std::exception& ex) :
FelixClientException(std::format("felix_io error: {}", ex.what())),
m_underlying_message{ex.what()}
{}
[[nodiscard]] std::string get_underlying_message() const { return m_underlying_message; }
private:
std::string m_underlying_message{};
};
class SendWhileConnectionDownException: public FelixClientException {
public:
SendWhileConnectionDownException() : FelixClientException("The send connection is currently down and being reconnected, try again") {
}
};
class TrickleLogicException: public FelixClientException {
public:
explicit TrickleLogicException(const std::string& er) : FelixClientException(std::format("Wrong order calling trickle funtions: {}", er)) {}
};
} // namespace felix
using FelixClientException [[deprecated("Use felix::FelixClientException instead")]] = felix::FelixClientException;
using FelixClientMessageTooBigException [[deprecated("Use felix::MessageTooBigException instead")]] = felix::MessageTooBigException;
using FelixClientSendBeforeOpenException [[deprecated("Use felix::SendBeforeOpenException instead")]] = felix::SendBeforeOpenException;
using FelixClientResourceNotAvailableException [[deprecated("Use felix::ResourceNotAvailableException instead")]] = felix::ResourceNotAvailableException;
using FelixClientPartiallyCompletedException [[deprecated("Use felix::PartiallyCompletedException instead")]] = felix::PartiallyCompletedException;
using FelixClientSendConnectionException [[deprecated("Use felix::SendConnectionException instead")]] = felix::SendConnectionException;
using FelixClientSendConnectionRefusedException [[deprecated("Use felix::SendConnectionRefusedException instead")]] = felix::SendConnectionRefusedException;
using FelixClientSendConnectionTimeoutException [[deprecated("Use felix::SendConnectionTimeoutException instead")]] = felix::SendConnectionTimeoutException;
using FelixClientSubscribeException [[deprecated("Use felix::SubscribeException instead")]] = felix::SubscribeException;
using FelixClientAlreadySubscribedException [[deprecated("Use felix::AlreadySubscribedException instead")]] = felix::AlreadySubscribedException;
using FelixClientFailedSubscribeException [[deprecated("Use felix::FailedSubscribeException instead")]] = felix::FailedSubscribeException;
using FelixClientFailedAsyncSubscribeException [[deprecated("Use felix::FailedAsyncSubscribeException instead")]] = felix::FailedAsyncSubscribeException;
using FelixClientNotSubscribedException [[deprecated("Use felix::NotSubscribedException instead")]] = felix::NotSubscribedException;
using FelixClientFailedUnsubscribeException [[deprecated("Use felix::FailedUnsubscribeException instead")]] = felix::FailedUnsubscribeException;
using FelixClientUnsubscribeTimeoutException [[deprecated("Use felix::UnsubscribeTimeoutException instead")]] = felix::UnsubscribeTimeoutException;
using FelixClientBusException [[deprecated("Use felix::BusException instead")]] = felix::BusException;
using FelixClientSendWhileConnectionDownException [[deprecated("Use felix::SendWhileConnectionDownException instead")]] = felix::SendWhileConnectionDownException;
using FelixClientTrickleLogicException [[deprecated("Use felix::TrickleLogicException instead")]] = felix::TrickleLogicException;