1use alien_error::AlienErrorData;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, AlienErrorData, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub enum ErrorData {
8 #[error(
10 code = "INVALID_client_config",
11 message = "Invalid platform configuration: {message}",
12 retryable = "false",
13 internal = "false"
14 )]
15 InvalidClientConfig {
16 message: String,
18 errors: Option<String>,
20 },
21
22 #[error(
24 code = "AUTHENTICATION_ERROR",
25 message = "Authentication failed: {message}",
26 retryable = "true",
27 internal = "false"
28 )]
29 AuthenticationError {
30 message: String,
32 },
33
34 #[error(
36 code = "REMOTE_RESOURCE_NOT_FOUND",
37 message = "{resource_type} '{resource_name}' not found",
38 retryable = "true",
39 internal = "false",
40 http_status_code = 404
41 )]
42 RemoteResourceNotFound {
43 resource_type: String,
45 resource_name: String,
47 },
48
49 #[error(
51 code = "REMOTE_RESOURCE_CONFLICT",
52 message = "Conflict with {resource_type} '{resource_name}': {message}",
53 retryable = "true",
54 internal = "false"
55 )]
56 RemoteResourceConflict {
57 resource_type: String,
59 resource_name: String,
61 message: String,
63 },
64
65 #[error(
67 code = "REMOTE_ACCESS_DENIED",
68 message = "Access denied to {resource_type} '{resource_name}'",
69 retryable = "true",
70 internal = "false"
71 )]
72 RemoteAccessDenied {
73 resource_type: String,
75 resource_name: String,
77 },
78
79 #[error(
81 code = "RATE_LIMIT_EXCEEDED",
82 message = "Rate limit exceeded: {message}",
83 retryable = "true",
84 internal = "false"
85 )]
86 RateLimitExceeded {
87 message: String,
89 },
90
91 #[error(
93 code = "TIMEOUT",
94 message = "Operation timed out: {message}",
95 retryable = "true",
96 internal = "false"
97 )]
98 Timeout {
99 message: String,
101 },
102
103 #[error(
105 code = "REMOTE_SERVICE_UNAVAILABLE",
106 message = "Service unavailable: {message}",
107 retryable = "true",
108 internal = "false"
109 )]
110 RemoteServiceUnavailable {
111 message: String,
113 },
114
115 #[error(
117 code = "QUOTA_EXCEEDED",
118 message = "Quota exceeded: {message}",
119 retryable = "true",
120 internal = "false"
121 )]
122 QuotaExceeded {
123 message: String,
125 },
126
127 #[error(
129 code = "HTTP_REQUEST_FAILED",
130 message = "{message}",
131 retryable = "true",
132 internal = "false"
133 )]
134 HttpRequestFailed {
135 message: String,
137 },
138
139 #[error(
141 code = "HTTP_RESPONSE_ERROR",
142 message = "{message}",
143 retryable = "true",
144 internal = "false"
145 )]
146 HttpResponseError {
147 message: String,
149 url: String,
151 http_status: u16,
153 http_request_text: Option<String>,
155 http_response_text: Option<String>,
157 },
158
159 #[error(
161 code = "REQUEST_SIGN_ERROR",
162 message = "Request signing failed: {message}",
163 retryable = "true",
164 internal = "true"
165 )]
166 RequestSignError {
167 message: String,
169 },
170
171 #[error(
173 code = "GENERIC_ERROR",
174 message = "{message}",
175 retryable = "true",
176 internal = "true"
177 )]
178 GenericError {
179 message: String,
181 },
182
183 #[error(
185 code = "INVALID_INPUT",
186 message = "Invalid input: {message}",
187 retryable = "false",
188 internal = "false"
189 )]
190 InvalidInput {
191 message: String,
193 field_name: Option<String>,
195 },
196
197 #[error(
199 code = "SERIALIZATION_ERROR",
200 message = "Serialization failed: {message}",
201 retryable = "false",
202 internal = "true"
203 )]
204 SerializationError {
205 message: String,
207 },
208
209 #[error(
211 code = "KUBECONFIG_ERROR",
212 message = "Kubeconfig error: {message}",
213 retryable = "false",
214 internal = "false"
215 )]
216 KubeconfigError {
217 message: String,
219 },
220
221 #[error(
223 code = "DATA_LOAD_ERROR",
224 message = "Failed to load data: {message}",
225 retryable = "false",
226 internal = "false"
227 )]
228 DataLoadError {
229 message: String,
231 },
232}
233
234pub type Result<T, E = ErrorData> = alien_error::Result<T, E>;
237
238pub type Error = alien_error::AlienError<ErrorData>;