network/pkg/errors/codes.go
2026-01-20 10:03:55 +02:00

180 lines
5.4 KiB
Go

package errors
// Error codes for categorizing errors.
// These codes map to HTTP status codes and gRPC codes where applicable.
const (
// CodeOK indicates success (not an error).
CodeOK = "OK"
// CodeCancelled indicates the operation was cancelled.
CodeCancelled = "CANCELLED"
// CodeUnknown indicates an unknown error occurred.
CodeUnknown = "UNKNOWN"
// CodeInvalidArgument indicates client specified an invalid argument.
CodeInvalidArgument = "INVALID_ARGUMENT"
// CodeDeadlineExceeded indicates operation deadline was exceeded.
CodeDeadlineExceeded = "DEADLINE_EXCEEDED"
// CodeNotFound indicates a resource was not found.
CodeNotFound = "NOT_FOUND"
// CodeAlreadyExists indicates attempting to create a resource that already exists.
CodeAlreadyExists = "ALREADY_EXISTS"
// CodePermissionDenied indicates the caller doesn't have permission.
CodePermissionDenied = "PERMISSION_DENIED"
// CodeResourceExhausted indicates a resource has been exhausted.
CodeResourceExhausted = "RESOURCE_EXHAUSTED"
// CodeFailedPrecondition indicates operation was rejected because the system
// is not in a required state.
CodeFailedPrecondition = "FAILED_PRECONDITION"
// CodeAborted indicates the operation was aborted.
CodeAborted = "ABORTED"
// CodeOutOfRange indicates operation attempted past valid range.
CodeOutOfRange = "OUT_OF_RANGE"
// CodeUnimplemented indicates operation is not implemented or not supported.
CodeUnimplemented = "UNIMPLEMENTED"
// CodeInternal indicates internal errors.
CodeInternal = "INTERNAL"
// CodeUnavailable indicates the service is currently unavailable.
CodeUnavailable = "UNAVAILABLE"
// CodeDataLoss indicates unrecoverable data loss or corruption.
CodeDataLoss = "DATA_LOSS"
// CodeUnauthenticated indicates the request does not have valid authentication.
CodeUnauthenticated = "UNAUTHENTICATED"
// Domain-specific error codes
// CodeValidation indicates input validation failed.
CodeValidation = "VALIDATION_ERROR"
// CodeUnauthorized indicates authentication is required or failed.
CodeUnauthorized = "UNAUTHORIZED"
// CodeForbidden indicates the authenticated user lacks permission.
CodeForbidden = "FORBIDDEN"
// CodeConflict indicates a resource conflict (e.g., duplicate key).
CodeConflict = "CONFLICT"
// CodeTimeout indicates an operation timed out.
CodeTimeout = "TIMEOUT"
// CodeRateLimit indicates rate limit was exceeded.
CodeRateLimit = "RATE_LIMIT_EXCEEDED"
// CodeServiceUnavailable indicates a downstream service is unavailable.
CodeServiceUnavailable = "SERVICE_UNAVAILABLE"
// CodeDatabaseError indicates a database operation failed.
CodeDatabaseError = "DATABASE_ERROR"
// CodeCacheError indicates a cache operation failed.
CodeCacheError = "CACHE_ERROR"
// CodeStorageError indicates a storage operation failed.
CodeStorageError = "STORAGE_ERROR"
// CodeNetworkError indicates a network operation failed.
CodeNetworkError = "NETWORK_ERROR"
// CodeExecutionError indicates a WASM or function execution failed.
CodeExecutionError = "EXECUTION_ERROR"
// CodeCompilationError indicates WASM compilation failed.
CodeCompilationError = "COMPILATION_ERROR"
// CodeConfigError indicates a configuration error.
CodeConfigError = "CONFIG_ERROR"
// CodeAuthError indicates an authentication/authorization error.
CodeAuthError = "AUTH_ERROR"
// CodeCryptoError indicates a cryptographic operation failed.
CodeCryptoError = "CRYPTO_ERROR"
// CodeSerializationError indicates serialization/deserialization failed.
CodeSerializationError = "SERIALIZATION_ERROR"
)
// ErrorCategory represents a high-level error category.
type ErrorCategory string
const (
// CategoryClient indicates a client-side error (4xx).
CategoryClient ErrorCategory = "CLIENT_ERROR"
// CategoryServer indicates a server-side error (5xx).
CategoryServer ErrorCategory = "SERVER_ERROR"
// CategoryNetwork indicates a network-related error.
CategoryNetwork ErrorCategory = "NETWORK_ERROR"
// CategoryTimeout indicates a timeout error.
CategoryTimeout ErrorCategory = "TIMEOUT_ERROR"
// CategoryValidation indicates a validation error.
CategoryValidation ErrorCategory = "VALIDATION_ERROR"
// CategoryAuth indicates an authentication/authorization error.
CategoryAuth ErrorCategory = "AUTH_ERROR"
)
// GetCategory returns the category for an error code.
func GetCategory(code string) ErrorCategory {
switch code {
case CodeInvalidArgument, CodeValidation, CodeNotFound,
CodeConflict, CodeAlreadyExists, CodeOutOfRange:
return CategoryClient
case CodeUnauthorized, CodeUnauthenticated,
CodeForbidden, CodePermissionDenied, CodeAuthError:
return CategoryAuth
case CodeTimeout, CodeDeadlineExceeded:
return CategoryTimeout
case CodeNetworkError, CodeServiceUnavailable, CodeUnavailable:
return CategoryNetwork
default:
return CategoryServer
}
}
// IsRetryable returns true if an error with the given code should be retried.
func IsRetryable(code string) bool {
switch code {
case CodeTimeout, CodeDeadlineExceeded,
CodeServiceUnavailable, CodeUnavailable,
CodeResourceExhausted, CodeAborted,
CodeNetworkError, CodeDatabaseError,
CodeCacheError, CodeStorageError:
return true
default:
return false
}
}
// IsClientError returns true if the error is a client error (4xx).
func IsClientError(code string) bool {
return GetCategory(code) == CategoryClient
}
// IsServerError returns true if the error is a server error (5xx).
func IsServerError(code string) bool {
return GetCategory(code) == CategoryServer
}