refactor: add custom error types for better error handling
This commit is contained in:
+18
-8
@@ -2,28 +2,38 @@ package pagination
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"errors"
|
||||||
"slices"
|
"slices"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrFirstAndLastProvided = errors.New("only one of first and last can be provided")
|
||||||
|
ErrFirstNegative = errors.New("first must be greater than 0")
|
||||||
|
ErrLastNegative = errors.New("last must be greater than 0")
|
||||||
|
ErrAfterAndBeforeProvided = errors.New("only one of after and before can be provided")
|
||||||
|
ErrInvalidAfterCursor = errors.New("after is not a valid cursor")
|
||||||
|
ErrInvalidBeforeCursor = errors.New("before is not a valid cursor")
|
||||||
|
ErrInvalidCursor = errors.New("invalid cursor")
|
||||||
|
)
|
||||||
|
|
||||||
func Validate(first *int, after *string, last *int, before *string) error {
|
func Validate(first *int, after *string, last *int, before *string) error {
|
||||||
if first != nil && last != nil {
|
if first != nil && last != nil {
|
||||||
return fmt.Errorf("only one of first and last can be provided")
|
return ErrFirstAndLastProvided
|
||||||
}
|
}
|
||||||
if first != nil && *first < 0 {
|
if first != nil && *first < 0 {
|
||||||
return fmt.Errorf("first must be greater than 0")
|
return ErrFirstNegative
|
||||||
}
|
}
|
||||||
if last != nil && *last < 0 {
|
if last != nil && *last < 0 {
|
||||||
return fmt.Errorf("last must be greater than 0")
|
return ErrLastNegative
|
||||||
}
|
}
|
||||||
if after != nil && len(*after) > 0 && before != nil && len(*before) > 0 {
|
if after != nil && len(*after) > 0 && before != nil && len(*before) > 0 {
|
||||||
return fmt.Errorf("only one of after and before can be provided")
|
return ErrAfterAndBeforeProvided
|
||||||
}
|
}
|
||||||
if ValidateCursor(after) != nil {
|
if ValidateCursor(after) != nil {
|
||||||
return fmt.Errorf("after is not a valid cursor")
|
return ErrInvalidAfterCursor
|
||||||
}
|
}
|
||||||
if ValidateCursor(before) != nil {
|
if ValidateCursor(before) != nil {
|
||||||
return fmt.Errorf("before is not a valid cursor")
|
return ErrInvalidBeforeCursor
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -42,7 +52,7 @@ func DecodeCursor(cursor *string) (string, error) {
|
|||||||
}
|
}
|
||||||
b64, err := base64.StdEncoding.DecodeString(*cursor)
|
b64, err := base64.StdEncoding.DecodeString(*cursor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", ErrInvalidCursor
|
||||||
}
|
}
|
||||||
return string(b64), nil
|
return string(b64), nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user