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