MillicastSDK 2.5.2
Loading...
Searching...
No Matches
error.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef __cplusplus
4
5#include <system_error>
6
7#include "exports.h"
8
9namespace millicast {
18class MILLICAST_API Error : public std::error_condition {
19 public:
20 Error() = default;
21 Error(Error&&) noexcept = default;
22 Error(const Error&) = default;
23 Error& operator=(Error&&) noexcept = default;
24 Error& operator=(const Error&) = default;
25 Error(int val, const std::error_category& cat) noexcept;
26 Error(int val,
27 const std::error_category& cat,
28 const std::string& error_reason);
29 Error(const std::exception_ptr& exception) noexcept;
30
31 template <
32 typename EnumT,
33 typename X =
34 std::enable_if_t<std::is_error_condition_enum<EnumT>::value, void>>
35 Error(EnumT value) : Error(make_error_condition(value)) {}
36
37 template <
38 typename EnumT,
39 typename X =
40 std::enable_if_t<std::is_error_condition_enum<EnumT>::value, void>>
41 Error(EnumT value, const std::string& reason)
42 : Error(make_error_condition(value, reason)) {}
43
44 template <
45 typename EnumT,
46 typename X =
47 std::enable_if_t<std::is_error_condition_enum<EnumT>::value, void>>
48 bool operator==(EnumT val) const {
49 return make_error_condition(val) == *this;
50 }
51
56 [[nodiscard]] const std::string& message() const { return _message; }
57
58 private:
59 std::string _message{};
60};
61
68template <typename T>
69struct MILLICAST_TEMPLATE_API ErrorCategoryBase : public std::error_category {
70 static const T& instance() {
71 static T inst;
72 return inst;
73 }
74};
75
80class MILLICAST_API AsyncOperationCancelled final
81 : public ErrorCategoryBase<AsyncOperationCancelled> {
82 public:
83 enum Value {
84 MULTIPLE_RESOLVE = 1,
85 ABORTED,
87 ABANDONED,
88 ACTOR_SHUTDOWN,
90 TIMEOUT,
91 };
92
93 [[nodiscard]] const char* name() const noexcept override;
94 [[nodiscard]] std::string message(int ev) const override;
95};
96
100class MILLICAST_API GenericError : public ErrorCategoryBase<GenericError> {
101 public:
102 enum Value {
103 EXCEPTION_THROWN = 1,
104 INVALID_JSON,
105 INVALID_JSON_SCHEMA,
107 TRANSACTION_ERROR,
108 NO_CREDENTIALS,
109 INVALID_OPTIONS,
110 INVALID_STATE,
111 REST_API_ERROR,
112 WEBSOCKET_HS_FAILED,
113 PEERCONNECTION_CREATE,
114 PEERCONNECTION_CREATE_OFFER,
115 PEERCONNECTION_LOCAL_DESC,
117 PEERCONNECTION_REMOTE_DESC,
119 PEERCONNECTION_ADD_TRACKS_FAILED,
120 PEERCONNECTION_NOT_ESTABLISHED,
121 PEERCONNECTION_SET_TRANSFORM_FAILED,
123 NULL_LISTENER,
124 INVALID_MEDIA_PERMISSIONS
125 };
126
127 [[nodiscard]] const char* name() const noexcept override;
128 [[nodiscard]] std::string message(int ev) const override;
129};
130
131class MILLICAST_API HttpError : public ErrorCategoryBase<HttpError> {
132 public:
133 enum Value {
134 UNAUTHORIZED = 401,
135 REQUEST_ABORTED = -1,
136 REQUEST_ABORTED_APPLE = 0,
137 JNI_INVALID_ARGUMENT = -101,
138 JNI_OUT_OF_RANGE = -102,
139 EMPTY_RESPONSE = -103,
140 UNKNOWN = -104,
141 };
142
143 [[nodiscard]] const char* name() const noexcept override;
144 [[nodiscard]] std::string message(int ev) const override;
145};
146
155class MILLICAST_API Exception : public std::runtime_error {
156 public:
157 Exception(const Error& err);
158 Exception(Error&& err);
159
164 [[nodiscard]] const Error& get_error() const;
165
166 private:
167 Error _err;
168};
169
176template <typename EnumT>
177std::enable_if_t<std::is_error_condition_enum<EnumT>::value, Error>
178make_error_condition(EnumT value) {
179 return make_error_condition(value, "");
180}
181
188Error MILLICAST_API make_error_condition(AsyncOperationCancelled::Value value,
189 const std::string& message);
190
197Error MILLICAST_API make_error_condition(GenericError::Value value,
198 const std::string& message);
199
206Error MILLICAST_API make_error_condition(HttpError::Value value,
207 const std::string& message);
208
209} // namespace millicast
210
211namespace std {
212template <>
213struct is_error_condition_enum<millicast::AsyncOperationCancelled::Value>
214 : public std::true_type {};
215template <>
216struct is_error_condition_enum<millicast::GenericError::Value>
217 : public std::true_type {};
218
219} // namespace std
220
221#endif // __cplusplus
#define MILLICAST_TEMPLATE_API
Definition exports.h:46
#define MILLICAST_API
Definition exports.h:51