use alien_error::AlienErrorData;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, AlienErrorData, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum ErrorData {
#[error(
code = "INVALID_client_config",
message = "Invalid platform configuration: {message}",
retryable = "false",
internal = "false"
)]
InvalidClientConfig {
message: String,
errors: Option<String>,
},
#[error(
code = "AUTHENTICATION_ERROR",
message = "Authentication failed: {message}",
retryable = "true",
internal = "false"
)]
AuthenticationError {
message: String,
},
#[error(
code = "REMOTE_RESOURCE_NOT_FOUND",
message = "{resource_type} '{resource_name}' not found",
retryable = "true",
internal = "false",
http_status_code = 404
)]
RemoteResourceNotFound {
resource_type: String,
resource_name: String,
},
#[error(
code = "REMOTE_RESOURCE_CONFLICT",
message = "Conflict with {resource_type} '{resource_name}': {message}",
retryable = "true",
internal = "false"
)]
RemoteResourceConflict {
resource_type: String,
resource_name: String,
message: String,
},
#[error(
code = "REMOTE_ACCESS_DENIED",
message = "Access denied to {resource_type} '{resource_name}'",
retryable = "true",
internal = "false"
)]
RemoteAccessDenied {
resource_type: String,
resource_name: String,
},
#[error(
code = "RATE_LIMIT_EXCEEDED",
message = "Rate limit exceeded: {message}",
retryable = "true",
internal = "false"
)]
RateLimitExceeded {
message: String,
},
#[error(
code = "TIMEOUT",
message = "Operation timed out: {message}",
retryable = "true",
internal = "false"
)]
Timeout {
message: String,
},
#[error(
code = "REMOTE_SERVICE_UNAVAILABLE",
message = "Service unavailable: {message}",
retryable = "true",
internal = "false"
)]
RemoteServiceUnavailable {
message: String,
},
#[error(
code = "QUOTA_EXCEEDED",
message = "Quota exceeded: {message}",
retryable = "true",
internal = "false"
)]
QuotaExceeded {
message: String,
},
#[error(
code = "HTTP_REQUEST_FAILED",
message = "{message}",
retryable = "true",
internal = "false"
)]
HttpRequestFailed {
message: String,
},
#[error(
code = "HTTP_RESPONSE_ERROR",
message = "{message}",
retryable = "true",
internal = "false"
)]
HttpResponseError {
message: String,
url: String,
http_status: u16,
http_request_text: Option<String>,
http_response_text: Option<String>,
},
#[error(
code = "REQUEST_SIGN_ERROR",
message = "Request signing failed: {message}",
retryable = "true",
internal = "true"
)]
RequestSignError {
message: String,
},
#[error(
code = "GENERIC_ERROR",
message = "{message}",
retryable = "true",
internal = "true"
)]
GenericError {
message: String,
},
#[error(
code = "INVALID_INPUT",
message = "Invalid input: {message}",
retryable = "false",
internal = "false"
)]
InvalidInput {
message: String,
field_name: Option<String>,
},
#[error(
code = "SERIALIZATION_ERROR",
message = "Serialization failed: {message}",
retryable = "false",
internal = "true"
)]
SerializationError {
message: String,
},
#[error(
code = "KUBECONFIG_ERROR",
message = "Kubeconfig error: {message}",
retryable = "false",
internal = "false"
)]
KubeconfigError {
message: String,
},
#[error(
code = "DATA_LOAD_ERROR",
message = "Failed to load data: {message}",
retryable = "false",
internal = "false"
)]
DataLoadError {
message: String,
},
}
pub type Result<T, E = ErrorData> = alien_error::Result<T, E>;
pub type Error = alien_error::AlienError<ErrorData>;