From e34d3c7cb8a7988848a2a18858ead47dbd388298 Mon Sep 17 00:00:00 2001 From: Stepan Bujnak Date: Sun, 27 Oct 2024 13:14:17 +0100 Subject: [PATCH] Added Error.IsRetryable() and StatusResourceExhausted (#56) The Error.IsRetryable(...) will tell the user whether retrying this error might resolve the issue. `StatusResourceExhausted` error will be retruned when a user sends more requests that is allowed by their quota. --- 000init.go | 2 +- error.go | 35 +++++++++++++++++++---------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/000init.go b/000init.go index fd9d499..717a756 100644 --- a/000init.go +++ b/000init.go @@ -8,7 +8,7 @@ package pex // #cgo LDFLAGS: -Wl,-rpath,/usr/local/lib // // #define PEX_SDK_MAJOR_VERSION 4 -// #define PEX_SDK_MINOR_VERSION 4 +// #define PEX_SDK_MINOR_VERSION 5 // // #include import "C" diff --git a/error.go b/error.go index 9b42a32..f3ccc29 100644 --- a/error.go +++ b/error.go @@ -11,18 +11,19 @@ import "fmt" type StatusCode int const ( - StatusOK = StatusCode(0) - StatusDeadlineExceeded = StatusCode(1) - StatusPermissionDenied = StatusCode(2) - StatusUnauthenticated = StatusCode(3) - StatusNotFound = StatusCode(4) - StatusInvalidInput = StatusCode(5) - StatusOutOfMemory = StatusCode(6) - StatusInternalError = StatusCode(7) - StatusNotInitialized = StatusCode(8) - StatusConnectionError = StatusCode(9) - StatusLookupFailed = StatusCode(10) - StatusLookupTimedOut = StatusCode(11) + StatusOK = StatusCode(0) + StatusDeadlineExceeded = StatusCode(1) + StatusPermissionDenied = StatusCode(2) + StatusUnauthenticated = StatusCode(3) + StatusNotFound = StatusCode(4) + StatusInvalidInput = StatusCode(5) + StatusOutOfMemory = StatusCode(6) + StatusInternalError = StatusCode(7) + StatusNotInitialized = StatusCode(8) + StatusConnectionError = StatusCode(9) + StatusLookupFailed = StatusCode(10) + StatusLookupTimedOut = StatusCode(11) + StatusResourceExhausted = StatusCode(12) ) // Error will be returend by most SDK functions. Besides an error @@ -30,8 +31,9 @@ const ( // determine the underlying issue, e.g. AssetLibrary.GetAsset will return // an error with StatusNotFound if the asset couldn't be found. type Error struct { - Code StatusCode - Message string + Code StatusCode + Message string + IsRetryable bool } func (e *Error) Error() string { @@ -41,8 +43,9 @@ func (e *Error) Error() string { func statusToError(status *C.Pex_Status) error { if !C.Pex_Status_OK(status) { return &Error{ - Code: StatusCode(C.Pex_Status_GetCode(status)), - Message: C.GoString(C.Pex_Status_GetMessage(status)), + Code: StatusCode(C.Pex_Status_GetCode(status)), + Message: C.GoString(C.Pex_Status_GetMessage(status)), + IsRetryable: bool(C.Pex_Status_IsRetryable(status)), } } return nil