mirror of
https://github.com/DeBrosOfficial/network.git
synced 2026-01-30 12:43:04 +00:00
180 lines
5.4 KiB
Go
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
|
|
}
|